<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[JavaScript]]></title><description><![CDATA[JavaScript]]></description><link>https://javascript-notes.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Tue, 20 Oct 2026 06:34:05 GMT</lastBuildDate><atom:link href="https://javascript-notes.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[JavaScript]]></title><description><![CDATA[JavaScript (JS) is a high-level, interpreted programming language primarily used to make web pages interactive. It is one of the core technologies of the web, along with HTML and CSS.

High level : JavaScript is closer to human languageInterpreted : ...]]></description><link>https://javascript-notes.hashnode.dev/javascript</link><guid isPermaLink="true">https://javascript-notes.hashnode.dev/javascript</guid><category><![CDATA[JavaScript]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[Frontend Development]]></category><dc:creator><![CDATA[koustav moitra]]></dc:creator><pubDate>Thu, 22 May 2025 15:36:19 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1747912702879/ba56b6ae-a250-4612-841f-30548414ad3d.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>JavaScript (JS)</strong> is a <strong>high-level, interpreted programming language</strong> primarily used to make <strong>web pages interactive</strong>. It is one of the <strong>core technologies of the web</strong>, along with HTML and CSS.</p>
<blockquote>
<p><mark>High level :</mark> J<strong>avaScript is closer to human language</strong><br /><strong><mark>Interpreted : </mark></strong> the <strong>code is run line-by-line by an interpreter</strong> ( the browser's JavaScript engine like V8 in Chrome).</p>
</blockquote>
<h3 id="heading-use-cases-of-javascript">Use Cases of JavaScript</h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Domain</strong></td><td><strong>What JavaScript Can Do</strong></td></tr>
</thead>
<tbody>
<tr>
<td><strong>Frontend Web Development :</strong></td><td>Make websites interactive: forms, animations, popups, dynamic content.</td></tr>
<tr>
<td><strong>Backend Development (Node.js) :</strong></td><td>Build full server-side applications: APIs, authentication, databases.</td></tr>
<tr>
<td><strong>Mobile App Development :</strong></td><td>Frameworks like <strong>React Native</strong>, <strong>Ionic</strong>, and <strong>NativeScript</strong> use JS to build cross-platform apps.</td></tr>
<tr>
<td>D<strong>esktop Applications :</strong></td><td>Build desktop apps using <strong>Electron.js</strong> (e.g., VS Code, Slack).</td></tr>
<tr>
<td><strong>Game Development :</strong></td><td>Use engines like <strong>Phaser.js</strong> or <strong>Three.js</strong> for 2D/3D browser games.</td></tr>
<tr>
<td><strong>Data Visualization :</strong></td><td>Libraries like <strong>Chart.js</strong>, <strong>D3.js</strong> let you visualize data interactively.</td></tr>
<tr>
<td><strong>Machine Learning in JS :</strong></td><td>Libraries like <strong>TensorFlow.js</strong> enable ML in the browser.</td></tr>
<tr>
<td><strong>Automation &amp; Scripting :</strong></td><td>Automate browser tasks with tools like <strong>Puppeteer</strong>, <strong>Playwright</strong>.</td></tr>
</tbody>
</table>
</div><hr />
<h2 id="heading-variables">Variables</h2>
<p>variables are like a container which are used to store something that will be needed repeatedly.</p>
<p>In JS, we have 3 types of variables :<br />1. Var<br />2. Let<br />3. Const</p>
<h3 id="heading-1-var">1. <code>var</code></h3>
<ul>
<li><p>Introduced in <strong>ES5</strong> (old way).</p>
</li>
<li><p><strong>Function-scoped</strong>.</p>
</li>
<li><p><strong>Can be redeclared and reassigned</strong>.</p>
</li>
<li><p><strong>Hoisted</strong> (moved to the top during execution, but not initialized).</p>
</li>
</ul>
<p><strong>Syntax:</strong></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">var</span> name = <span class="hljs-string">"Koustav"</span>;
<span class="hljs-built_in">console</span>.log(name);  <span class="hljs-comment">// koustav</span>
<span class="hljs-comment">//-----------------------</span>
<span class="hljs-keyword">var</span> num = <span class="hljs-number">10</span>;
<span class="hljs-built_in">console</span>.log(num);  <span class="hljs-comment">// 10</span>

<span class="hljs-keyword">var</span> num=<span class="hljs-number">20</span>;
<span class="hljs-built_in">console</span>.log(num);   <span class="hljs-comment">// 20</span>
<span class="hljs-comment">//-----------------------</span>
{
<span class="hljs-keyword">var</span> n = <span class="hljs-number">50</span>;
}
<span class="hljs-built_in">console</span>.log(n);   <span class="hljs-comment">// 50 </span>
<span class="hljs-comment">// ----------------------</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">greet</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">var</span> msg = <span class="hljs-string">"Hello"</span>;
  <span class="hljs-keyword">if</span> (<span class="hljs-literal">true</span>) {
    <span class="hljs-keyword">var</span> msg = <span class="hljs-string">"Hi"</span>; <span class="hljs-comment">// Same variable (due to function scope)</span>
    <span class="hljs-built_in">console</span>.log(msg); <span class="hljs-comment">// Hi</span>
  }
  <span class="hljs-built_in">console</span>.log(msg); <span class="hljs-comment">// Hi</span>
}
greet();
</code></pre>
<h3 id="heading-2-let">2. <code>let</code></h3>
<ul>
<li><p>Introduced in <strong>ES6</strong>.</p>
</li>
<li><p><strong>Block-scoped</strong>.</p>
</li>
<li><p><strong>Can be reassigned</strong> but <strong>not redeclared</strong> in the same scope.</p>
</li>
<li><p><strong>Hoisted</strong> but not initialized (you get a <code>ReferenceError</code> if used before declaration).</p>
</li>
</ul>
<p><strong>Syntax</strong>:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> age = <span class="hljs-number">25</span>;
<span class="hljs-comment">//-------------------------</span>
<span class="hljs-keyword">let</span> num = <span class="hljs-number">10</span>;
<span class="hljs-built_in">console</span>.log(num);  <span class="hljs-comment">// 10</span>

<span class="hljs-keyword">let</span> num = <span class="hljs-number">20</span>;
<span class="hljs-built_in">console</span>.log(num);   <span class="hljs-comment">// error - num is already defined - cannot re-declared</span>

num = <span class="hljs-number">20</span>;
<span class="hljs-built_in">console</span>.log(num);   <span class="hljs-comment">// this will work as it can be re-assigned </span>
<span class="hljs-comment">//-------------------------</span>

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">test</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">let</span> x = <span class="hljs-number">10</span>;
  <span class="hljs-keyword">if</span> (<span class="hljs-literal">true</span>) {
    <span class="hljs-keyword">let</span> x = <span class="hljs-number">20</span>; <span class="hljs-comment">// different variable (block scope)</span>
    <span class="hljs-built_in">console</span>.log(x); <span class="hljs-comment">// 20</span>
  }
  <span class="hljs-built_in">console</span>.log(x); <span class="hljs-comment">// 10</span>
}
test();
</code></pre>
<h3 id="heading-3-const">3. <code>const</code></h3>
<ul>
<li><p>Also introduced in <strong>ES6</strong>.</p>
</li>
<li><p><strong>Block-scoped</strong> like <code>let</code>.</p>
</li>
<li><p><strong>Cannot be reassigned</strong>.</p>
</li>
<li><p>Must be <strong>initialized at the time of declaration</strong>.</p>
</li>
</ul>
<p><strong>Syntax</strong>:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> pi = <span class="hljs-number">3.14</span>;
<span class="hljs-comment">// --------------------</span>

<span class="hljs-keyword">const</span> user = { <span class="hljs-attr">name</span>: <span class="hljs-string">"Koustav"</span> };
user.name = <span class="hljs-string">"Moitra"</span>; <span class="hljs-comment">// Allowed (object property changed)</span>
<span class="hljs-built_in">console</span>.log(user.name); <span class="hljs-comment">// Moitra</span>

user = { <span class="hljs-attr">name</span>: <span class="hljs-string">"New"</span> }; <span class="hljs-comment">// ❌ Error: Assignment to constant variable</span>
<span class="hljs-comment">// --------------------</span>

<span class="hljs-comment">// Use for constants or when reassignment is not needed.</span>
<span class="hljs-comment">// For objects/arrays, internal values can be changed</span>
</code></pre>
<p><strong>Summary Table:</strong></p>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Feature</strong></td><td><code>var</code></td><td><code>let</code></td><td><code>const</code></td></tr>
</thead>
<tbody>
<tr>
<td>Scope</td><td>Function</td><td>Block</td><td>Block</td></tr>
<tr>
<td>Hoisting</td><td>Yes (undefined)</td><td>Yes (no access)</td><td>Yes (no access)</td></tr>
<tr>
<td>Reassignment</td><td>✅ Yes</td><td>✅ Yes</td><td>❌ No</td></tr>
<tr>
<td>Redeclaration</td><td>✅ Yes</td><td>❌ No</td><td>❌ No</td></tr>
<tr>
<td>Initialization</td><td>Optional</td><td>Optional</td><td>Mandatory</td></tr>
</tbody>
</table>
</div><hr />
<h2 id="heading-hoisting">Hoisting</h2>
<p><strong>Hoisting</strong> is JavaScript's default behavior of <strong>moving declarations to the top of the current scope</strong> (before code execution).</p>
<p><strong><mark>Hoisting with </mark></strong> <code>var</code></p>
<pre><code class="lang-javascript"><span class="hljs-built_in">console</span>.log(name); <span class="hljs-comment">// undefined</span>
<span class="hljs-keyword">var</span> name = <span class="hljs-string">"Koustav"</span>;
</code></pre>
<p><strong>Explanation:</strong></p>
<p>During the memory phase, <code>var name</code> is hoisted to the top and initialized as <code>undefined</code>. So by the time <code>console.log()</code> runs, <code>name</code> exists but has no value yet.</p>
<p>Internally, JS sees it like:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">var</span> name;
<span class="hljs-built_in">console</span>.log(name); <span class="hljs-comment">// undefined</span>
name = <span class="hljs-string">"Koustav"</span>;
</code></pre>
<p><code>let</code> <strong><mark>and </mark></strong> <code>const</code> <strong><mark>are hoisted but not initialized</mark></strong></p>
<pre><code class="lang-javascript"><span class="hljs-built_in">console</span>.log(age); <span class="hljs-comment">// ❌ ReferenceError</span>
<span class="hljs-keyword">let</span> age = <span class="hljs-number">25</span>;
</code></pre>
<p>Why?</p>
<ul>
<li><p><code>let</code> and <code>const</code> are hoisted but kept in a <strong>Temporal Dead Zone (TDZ)</strong> from the start of the block until they are initialized.</p>
</li>
<li><p>You <strong>can’t access them before declaration</strong>.</p>
</li>
</ul>
<p><strong><mark>Function Declaration Hoisting</mark></strong></p>
<pre><code class="lang-javascript">greet(); <span class="hljs-comment">// ✅ Works</span>

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">greet</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Hello, Koustav!"</span>);
}
</code></pre>
<p><strong>Why?</strong></p>
<ul>
<li><strong>Function declarations are fully hoisted</strong>, including their body.</li>
</ul>
<p>JS treats it like:</p>
<pre><code class="lang-javascript"><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">greet</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Hello, Koustav!"</span>);
}
greet();
</code></pre>
<p><strong><mark>Function Expression is not hoisted</mark></strong></p>
<pre><code class="lang-javascript">sayHi(); <span class="hljs-comment">// ❌ TypeError: sayHi is not a function</span>

<span class="hljs-keyword">var</span> sayHi = <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) </span>{
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Hi!"</span>);
};
</code></pre>
<p>Why?</p>
<ul>
<li><p><code>sayHi</code> is hoisted as a variable (<code>undefined</code>), but the <strong>function body is not</strong> hoisted.</p>
</li>
<li><p>You’re trying to call <code>undefined()</code>.</p>
</li>
</ul>
<hr />
<h2 id="heading-temporal-dead-zone-tdz"><strong>Temporal Dead Zone (TDZ)</strong></h2>
<p>The <strong>Temporal Dead Zone (TDZ)</strong> is the time <strong>between</strong>:</p>
<ul>
<li><p>When a variable is <strong>hoisted</strong> (declared in memory), and</p>
</li>
<li><p>When it is <strong>actually initialized</strong> in your code.</p>
</li>
</ul>
<p>If you try to access the variable <strong>before it’s initialized</strong>, you’ll get a <strong>ReferenceError</strong> — even though it's hoisted.</p>
<p>TDZ applies to:</p>
<ul>
<li><p><code>let</code></p>
</li>
<li><p><code>const</code></p>
</li>
</ul>
<blockquote>
<p>❌ Not to <code>var</code> (it gets <code>undefined</code> instead)</p>
</blockquote>
<p><strong>Example:</strong></p>
<pre><code class="lang-javascript"><span class="hljs-built_in">console</span>.log(name); <span class="hljs-comment">// ❌ ReferenceError</span>
<span class="hljs-keyword">let</span> name = <span class="hljs-string">"Koustav"</span>;
</code></pre>
<p><strong>Why this error?</strong></p>
<ul>
<li><p><code>let name</code> is hoisted to the top.</p>
</li>
<li><p>But it’s not initialized until the <code>let</code> line is executed.</p>
</li>
<li><p>So <code>console.log(name)</code> is trying to access it while it's still in the <strong>TDZ</strong>.</p>
</li>
</ul>
<p><strong>Behind the scenes:</strong></p>
<p>JavaScript sees your code like:</p>
<pre><code class="lang-javascript"><span class="hljs-comment">// TDZ starts here</span>
<span class="hljs-keyword">let</span> name; <span class="hljs-comment">// declared (hoisted), but NOT initialized</span>

<span class="hljs-built_in">console</span>.log(name); <span class="hljs-comment">// in TDZ → ReferenceError</span>
name = <span class="hljs-string">"Koustav"</span>; <span class="hljs-comment">// TDZ ends here</span>
</code></pre>
<p><strong>Best Practices to Avoid TDZ Issues:</strong></p>
<ul>
<li><p>✅ Always <strong>declare variables at the top</strong> of their block.</p>
</li>
<li><p>✅ Never <strong>use variables before declaring them</strong>.</p>
</li>
<li><p>❌ Avoid mixing <code>var</code>, <code>let</code>, and <code>const</code> in the same scope.</p>
</li>
</ul>
<hr />
<h2 id="heading-template-literals">Template Literals</h2>
<p><strong>Template Literals</strong> are a new way to define strings introduced in <strong>ES6 (ECMAScript 2015)</strong>.</p>
<p>Instead of using:</p>
<ul>
<li><p><strong>Single quotes (</strong><code>'</code>)</p>
</li>
<li><p><strong>Double quotes (</strong><code>"</code>)</p>
</li>
</ul>
<p>You use <strong>backticks (</strong><code>` </code>).</p>
<p><strong><mark>1. Basic Example:</mark></strong></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> name = <span class="hljs-string">"Koustav"</span>;
<span class="hljs-keyword">let</span> msg = <span class="hljs-string">`Hello, <span class="hljs-subst">${name}</span>!`</span>;
<span class="hljs-built_in">console</span>.log(msg); <span class="hljs-comment">// Hello, Koustav!</span>
</code></pre>
<p><strong><mark>2. Expression Interpolation:</mark></strong></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> a = <span class="hljs-number">10</span>;
<span class="hljs-keyword">let</span> b = <span class="hljs-number">20</span>;
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">`The sum of <span class="hljs-subst">${a}</span> and <span class="hljs-subst">${b}</span> is <span class="hljs-subst">${a + b}</span>.`</span>);
<span class="hljs-comment">// Output: The sum of 10 and 20 is 30.</span>
</code></pre>
<p>✅ You can even run JavaScript expressions inside <code>${}</code>.</p>
<p><strong><mark>3. Multi-line Strings:</mark></strong></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> poem = <span class="hljs-string">`Roses are red,
Violets are blue,
Template literals,
Make strings new.`</span>;

<span class="hljs-built_in">console</span>.log(poem);
<span class="hljs-comment">/*
Roses are red,
Violets are blue,
Template literals,
Make strings new.
*/</span>
</code></pre>
<p>✅ No need to use <code>\n</code> or <code>+</code> for line breaks!</p>
<p><strong><mark>Before Template Literals (Old Way):</mark></strong></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> name = <span class="hljs-string">"Koustav"</span>;
<span class="hljs-keyword">let</span> msg = <span class="hljs-string">"Hello, "</span> + name + <span class="hljs-string">"!"</span>;
</code></pre>
<p><strong><mark>Now with Template Literals:</mark></strong></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> msg = <span class="hljs-string">`Hello, <span class="hljs-subst">${name}</span>!`</span>;
</code></pre>
<hr />
<h2 id="heading-data-type">Data Type</h2>
<p>JavaScript is a <strong>dynamically typed language</strong>, meaning:</p>
<blockquote>
<p>You don’t need to declare a variable’s type — it’s determined at runtime.</p>
</blockquote>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Category</strong></td><td><strong>Data Types</strong></td></tr>
</thead>
<tbody>
<tr>
<td><strong>Primitive</strong></td><td>String, Number, Boolean, Null, Undefined, Symbol, BigInt</td></tr>
<tr>
<td><strong>Non-Primitive</strong></td><td>Object (includes arrays, functions, dates, etc.)</td></tr>
</tbody>
</table>
</div><div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Feature</strong></td><td><strong>Primitive</strong></td><td><strong>Non-Primitive (Reference)</strong></td></tr>
</thead>
<tbody>
<tr>
<td><strong>Stored as</strong></td><td>Value</td><td>Reference (Memory Address)</td></tr>
<tr>
<td><strong>Mutable</strong></td><td>❌ No</td><td>✅ Yes</td></tr>
<tr>
<td><strong>Compared by</strong></td><td>Value</td><td>Reference</td></tr>
<tr>
<td><strong>Examples</strong></td><td><code>"Hello"</code>, <code>42</code>, <code>true</code></td><td><code>{}</code>, <code>[]</code>, <code>function() {}</code></td></tr>
<tr>
<td><strong>Memory Efficient</strong></td><td>More</td><td>Less (because of references)</td></tr>
</tbody>
</table>
</div><h3 id="heading-1-string">1. <strong>String</strong></h3>
<p>Represents <strong>text</strong>.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> name = <span class="hljs-string">"Koustav"</span>;
<span class="hljs-keyword">let</span> greeting = <span class="hljs-string">'Hello'</span>;
<span class="hljs-keyword">let</span> sentence = <span class="hljs-string">`Welcome, <span class="hljs-subst">${name}</span>`</span>; <span class="hljs-comment">// template literal</span>
</code></pre>
<p>Strings can use:</p>
<ul>
<li><p>Double quotes <code>" "</code></p>
</li>
<li><p>Single quotes <code>' '</code></p>
</li>
<li><p>Backticks (for template literals)</p>
</li>
</ul>
<h3 id="heading-2-number">2. <strong>Number</strong></h3>
<p>Represents <strong>any number</strong>, whether integer or floating-point.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> age = <span class="hljs-number">25</span>;
<span class="hljs-keyword">let</span> price = <span class="hljs-number">99.99</span>;
<span class="hljs-keyword">let</span> hex = <span class="hljs-number">0xff</span>;  <span class="hljs-comment">// hexadecimal</span>
</code></pre>
<p>JavaScript has only <strong>one number type</strong>, unlike other languages.</p>
<h3 id="heading-3-bigint">3. <strong>BigInt</strong></h3>
<p>Used for very large integers beyond the <code>Number</code> limit.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> bigNum = <span class="hljs-number">1234567890123456789012345678901234567890n</span>;
</code></pre>
<p>Note the <code>n</code> at the end.</p>
<h3 id="heading-4-boolean">4. <strong>Boolean</strong></h3>
<p>Represents <strong>true or false</strong>.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> isLoggedIn = <span class="hljs-literal">true</span>;
<span class="hljs-keyword">let</span> hasPermission = <span class="hljs-literal">false</span>;
</code></pre>
<p>Commonly used in conditions and comparisons.</p>
<h3 id="heading-5-undefined">5. <strong>Undefined</strong></h3>
<p>A variable that has been declared but <strong>not yet assigned</strong> a value.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> x;
<span class="hljs-built_in">console</span>.log(x); <span class="hljs-comment">// undefined</span>
</code></pre>
<h3 id="heading-6-null">6. <strong>Null</strong></h3>
<p>Represents <strong>intentional absence of value</strong>.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> data = <span class="hljs-literal">null</span>;
</code></pre>
<p>Often used to <strong>reset</strong> a variable or indicate "nothing".</p>
<h3 id="heading-7-symbol">7. <strong>Symbol</strong></h3>
<p>Used for creating <strong>unique identifiers</strong> (mainly in advanced coding or libraries).</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> id = <span class="hljs-built_in">Symbol</span>(<span class="hljs-string">"userID"</span>);
</code></pre>
<p>Symbols are <strong>always unique</strong>, even with the same description.</p>
<h3 id="heading-8-object">8. <strong>Object</strong></h3>
<p>Used to store <strong>collections of data</strong> or <strong>complex entities</strong>.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> user = {
  <span class="hljs-attr">name</span>: <span class="hljs-string">"Koustav"</span>,
  <span class="hljs-attr">age</span>: <span class="hljs-number">25</span>,
  <span class="hljs-attr">isAdmin</span>: <span class="hljs-literal">true</span>
};
</code></pre>
<p>Arrays, functions, and even dates are <strong>objects</strong> in JavaScript.</p>
<h2 id="heading-special-object-types">Special Object Types</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Type</td><td>Description</td><td>Example</td></tr>
</thead>
<tbody>
<tr>
<td>Array</td><td>Ordered collection</td><td><code>[1, 2, 3]</code></td></tr>
<tr>
<td>Function</td><td>Block of code that can be called</td><td><code>function() {}</code></td></tr>
<tr>
<td>Date</td><td>Handles dates and times</td><td><code>new Date()</code></td></tr>
<tr>
<td>RegExp</td><td>Pattern for matching text</td><td><code>/[a-z]/</code></td></tr>
</tbody>
</table>
</div><h2 id="heading-typeof-operator"><code>typeof</code> Operator</h2>
<p>Use <code>typeof</code> to check the data type:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">typeof</span> <span class="hljs-string">"Hello"</span>       <span class="hljs-comment">// "string"</span>
<span class="hljs-keyword">typeof</span> <span class="hljs-number">42</span>            <span class="hljs-comment">// "number"</span>
<span class="hljs-keyword">typeof</span> <span class="hljs-literal">true</span>          <span class="hljs-comment">// "boolean"</span>
<span class="hljs-keyword">typeof</span> <span class="hljs-literal">undefined</span>     <span class="hljs-comment">// "undefined"</span>
<span class="hljs-keyword">typeof</span> <span class="hljs-literal">null</span>          <span class="hljs-comment">// ❗️"object" (this is a JavaScript quirk)</span>
<span class="hljs-keyword">typeof</span> <span class="hljs-built_in">Symbol</span>()      <span class="hljs-comment">// "symbol"</span>
<span class="hljs-keyword">typeof</span> {}            <span class="hljs-comment">// "object"</span>
<span class="hljs-keyword">typeof</span> []            <span class="hljs-comment">// "object"</span>
<span class="hljs-keyword">typeof</span> <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{}  <span class="hljs-comment">// "function"</span>
</code></pre>
<hr />
<h2 id="heading-operators">Operators</h2>
<p><strong>Operators</strong> are special symbols or keywords used to perform operations on <strong>operands</strong> (values and variables).</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> sum = <span class="hljs-number">10</span> + <span class="hljs-number">5</span>;  <span class="hljs-comment">// '+' is the operator; 10 and 5 are operands</span>
</code></pre>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Type</strong></td><td><strong>Operators</strong></td></tr>
</thead>
<tbody>
<tr>
<td>Arithmetic</td><td><code>+</code>, <code>-</code>, <code>*</code>, <code>/</code>, <code>%</code>, <code>**</code>, <code>++</code>, <code>--</code></td></tr>
<tr>
<td>Assignment</td><td><code>=</code>, <code>+=</code>, <code>-=</code>, <code>*=</code>, <code>/=</code>, <code>%=</code>, <code>**=</code></td></tr>
<tr>
<td>Comparison</td><td><code>==</code>, <code>===</code>, <code>!=</code>, <code>!==</code>, <code>&lt;</code>, <code>&gt;</code>, <code>&lt;=</code>, <code>&gt;=</code></td></tr>
<tr>
<td>Logical</td><td><code>&amp;&amp;</code>, `</td><td></td><td><code>,</code>!`</td></tr>
<tr>
<td>String</td><td><code>+</code> (concatenation)</td></tr>
<tr>
<td>Conditional</td><td><code>? :</code> (ternary)</td></tr>
<tr>
<td>Type</td><td><code>typeof</code>, <code>instanceof</code></td></tr>
</tbody>
</table>
</div><hr />
<h2 id="heading-type-coercion">Type Coercion</h2>
<p><strong>Type Coercion</strong> in JavaScript is the <strong>automatic or implicit conversion</strong> of values from one data type to another.</p>
<p>It happens <strong>when you perform operations</strong> on mismatched data types — like adding a string and a number.</p>
<p><strong>1. Implicit Coercion</strong></p>
<p>JavaScript <strong>automatically converts</strong> one data type to another.</p>
<pre><code class="lang-javascript"><span class="hljs-built_in">console</span>.log(<span class="hljs-string">"5"</span> + <span class="hljs-number">1</span>); <span class="hljs-comment">// "51" → number 1 is coerced to string</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">"5"</span> - <span class="hljs-number">1</span>); <span class="hljs-comment">// 4   → string "5" is coerced to number</span>
</code></pre>
<p><strong>2. Explicit Coercion</strong></p>
<p>You <strong>manually convert</strong> a value using functions like <code>Number()</code>, <code>String()</code>, or <code>Boolean()</code>.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> a = <span class="hljs-string">"42"</span>;
<span class="hljs-keyword">let</span> b = <span class="hljs-built_in">Number</span>(a); <span class="hljs-comment">// Explicit coercion from string to number</span>
<span class="hljs-built_in">console</span>.log(b);    <span class="hljs-comment">// 42</span>
</code></pre>
<p><strong><mark>1. Number + String</mark></strong></p>
<pre><code class="lang-javascript"><span class="hljs-built_in">console</span>.log(<span class="hljs-number">10</span> + <span class="hljs-string">"5"</span>);      <span class="hljs-comment">// "105" (Number → String → Concatenation)</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">"5"</span> + <span class="hljs-number">10</span>);      <span class="hljs-comment">// "510"</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">"10"</span> + <span class="hljs-literal">true</span>);   <span class="hljs-comment">// "10true"</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">"10"</span> + <span class="hljs-literal">null</span>);   <span class="hljs-comment">// "10null"</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">"10"</span> + <span class="hljs-literal">undefined</span>); <span class="hljs-comment">// "10undefined"</span>
</code></pre>
<p>➡️ The <code>+</code> operator <strong>prefers string</strong> if one of the operands is a string.</p>
<p><strong><mark>2. Number - String / Boolean / Null / Undefined</mark></strong></p>
<pre><code class="lang-javascript"><span class="hljs-built_in">console</span>.log(<span class="hljs-string">"10"</span> - <span class="hljs-number">5</span>);      <span class="hljs-comment">// 5   → String to Number</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-literal">true</span> - <span class="hljs-number">1</span>);      <span class="hljs-comment">// 0   → true → 1</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-literal">false</span> - <span class="hljs-number">1</span>);     <span class="hljs-comment">// -1  → false → 0</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-literal">null</span> - <span class="hljs-number">1</span>);      <span class="hljs-comment">// -1  → null → 0</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-literal">undefined</span> - <span class="hljs-number">1</span>); <span class="hljs-comment">// NaN → undefined → NaN</span>
</code></pre>
<p>➡️ <code>-</code>, <code>*</code>, <code>/</code> → always try to convert values to <strong>Number</strong>.</p>
<p><strong><mark>3. String - String / Boolean / Null / Object</mark></strong></p>
<pre><code class="lang-javascript"><span class="hljs-built_in">console</span>.log(<span class="hljs-string">"10"</span> - <span class="hljs-string">"5"</span>);     <span class="hljs-comment">// 5</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">"hello"</span> - <span class="hljs-string">"hi"</span>); <span class="hljs-comment">// NaN (non-numeric strings)</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">"5"</span> - <span class="hljs-literal">true</span>);     <span class="hljs-comment">// 4</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">"5"</span> - <span class="hljs-literal">null</span>);     <span class="hljs-comment">// 5</span>
</code></pre>
<p>➡️ String gets coerced to number <strong>only if it’s numeric</strong>.</p>
<p><strong><mark>4. Boolean + Number / String</mark></strong></p>
<pre><code class="lang-javascript"><span class="hljs-built_in">console</span>.log(<span class="hljs-literal">true</span> + <span class="hljs-number">2</span>);       <span class="hljs-comment">// 3</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-literal">false</span> + <span class="hljs-number">3</span>);      <span class="hljs-comment">// 3</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-literal">true</span> + <span class="hljs-string">"2"</span>);     <span class="hljs-comment">// "true2"</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-literal">false</span> + <span class="hljs-string">"3"</span>);    <span class="hljs-comment">// "false3"</span>
</code></pre>
<p>➡️ Boolean → <code>true</code> becomes <code>1</code>, <code>false</code> becomes <code>0</code>.</p>
<p><strong><mark>5. null and undefined</mark></strong></p>
<pre><code class="lang-javascript"><span class="hljs-built_in">console</span>.log(<span class="hljs-literal">null</span> + <span class="hljs-number">5</span>);        <span class="hljs-comment">// 5       → null → 0</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-literal">undefined</span> + <span class="hljs-number">5</span>);   <span class="hljs-comment">// NaN     → undefined → NaN</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-literal">null</span> == <span class="hljs-literal">undefined</span>); <span class="hljs-comment">// true (only in loose equality)</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-literal">null</span> === <span class="hljs-literal">undefined</span>); <span class="hljs-comment">// false (different types)</span>
</code></pre>
<p><strong><mark>6. Array or Object + Number/String</mark></strong></p>
<pre><code class="lang-javascript"><span class="hljs-built_in">console</span>.log([] + <span class="hljs-number">1</span>);          <span class="hljs-comment">// "1"       → [] → ""</span>
<span class="hljs-built_in">console</span>.log([<span class="hljs-number">1</span>] + <span class="hljs-number">1</span>);         <span class="hljs-comment">// "11"      → [1] → "1"</span>
<span class="hljs-built_in">console</span>.log({} + <span class="hljs-number">1</span>);          <span class="hljs-comment">// "[object Object]1"</span>
<span class="hljs-built_in">console</span>.log([] - <span class="hljs-number">1</span>);          <span class="hljs-comment">// -1        → [] → 0</span>
</code></pre>
<p>➡️ Arrays and objects are coerced to strings like <code>""</code> or <code>"[object Object]"</code>.</p>
<p><strong><mark>7. Special </mark></strong> <code>NaN</code> <strong><mark> Cases</mark></strong></p>
<pre><code class="lang-javascript"><span class="hljs-built_in">console</span>.log(<span class="hljs-literal">NaN</span> + <span class="hljs-number">1</span>);         <span class="hljs-comment">// NaN</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-literal">NaN</span> - <span class="hljs-number">1</span>);         <span class="hljs-comment">// NaN</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-literal">NaN</span> * <span class="hljs-number">2</span>);         <span class="hljs-comment">// NaN</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-literal">NaN</span> === <span class="hljs-literal">NaN</span>);     <span class="hljs-comment">// false → NaN is not equal to anything, even itself</span>
</code></pre>
<p><strong><mark>8. Arithmetic with Booleans</mark></strong></p>
<pre><code class="lang-javascript"><span class="hljs-built_in">console</span>.log(<span class="hljs-literal">true</span> * <span class="hljs-number">3</span>);        <span class="hljs-comment">// 3</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-literal">false</span> / <span class="hljs-number">2</span>);       <span class="hljs-comment">// 0</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-literal">true</span> * <span class="hljs-literal">false</span>);    <span class="hljs-comment">// 0</span>
</code></pre>
<p><strong><mark>9. Truthy &amp; Falsy in Arithmetic</mark></strong></p>
<p><strong>Falsy values</strong>: <code>false</code>, <code>0</code>, <code>""</code>, <code>null</code>, <code>undefined</code>, <code>NaN</code></p>
<pre><code class="lang-javascript"><span class="hljs-built_in">console</span>.log(<span class="hljs-string">""</span> + <span class="hljs-number">1</span>);         <span class="hljs-comment">// "1"</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-number">0</span> + <span class="hljs-string">"0"</span>);        <span class="hljs-comment">// "00"</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-literal">false</span> + <span class="hljs-literal">true</span>);   <span class="hljs-comment">// 1</span>
<span class="hljs-built_in">console</span>.log(<span class="hljs-literal">null</span> + <span class="hljs-literal">true</span>);    <span class="hljs-comment">// 1</span>
</code></pre>
<p><strong><mark>10. Unary + operator (Explicit conversion to Number)</mark></strong></p>
<pre><code class="lang-javascript"><span class="hljs-built_in">console</span>.log(+<span class="hljs-string">"5"</span>);           <span class="hljs-comment">// 5</span>
<span class="hljs-built_in">console</span>.log(+<span class="hljs-literal">true</span>);          <span class="hljs-comment">// 1</span>
<span class="hljs-built_in">console</span>.log(+<span class="hljs-literal">false</span>);         <span class="hljs-comment">// 0</span>
<span class="hljs-built_in">console</span>.log(+<span class="hljs-literal">null</span>);          <span class="hljs-comment">// 0</span>
<span class="hljs-built_in">console</span>.log(+<span class="hljs-literal">undefined</span>);     <span class="hljs-comment">// NaN</span>
</code></pre>
<hr />
<h2 id="heading-conditional-statements">Conditional Statements</h2>
<p>Conditional statements allow your code to <strong>make decisions</strong> and execute <strong>different blocks of code</strong> based on <strong>conditions (true/false)</strong>.</p>
<p><strong><mark>1. </mark></strong> <code>if</code> <strong><mark> Statement</mark></strong></p>
<p><strong>Syntax:</strong></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">if</span> (condition) {
  <span class="hljs-comment">// code to execute if condition is true</span>
}
</code></pre>
<p><strong>Example:</strong></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> age = <span class="hljs-number">18</span>;

<span class="hljs-keyword">if</span> (age &gt;= <span class="hljs-number">18</span>) {
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"You are eligible to vote."</span>);
}
</code></pre>
<p><strong><mark>2. </mark></strong> <code>if...else</code> <strong><mark> Statement</mark></strong></p>
<p><strong>Syntax</strong>:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">if</span> (condition) {
  <span class="hljs-comment">// if true</span>
} <span class="hljs-keyword">else</span> {
  <span class="hljs-comment">// if false</span>
}
</code></pre>
<p><strong>Example</strong>:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> marks = <span class="hljs-number">40</span>;

<span class="hljs-keyword">if</span> (marks &gt;= <span class="hljs-number">50</span>) {
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"You passed."</span>);
} <span class="hljs-keyword">else</span> {
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"You failed."</span>);
}
</code></pre>
<p><strong><mark>3. </mark></strong> <code>if...else if...else</code> <strong><mark> Statement</mark></strong></p>
<p><strong>Syntax</strong>:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">if</span> (condition1) {
  <span class="hljs-comment">// block 1</span>
} <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (condition2) {
  <span class="hljs-comment">// block 2</span>
} <span class="hljs-keyword">else</span> {
  <span class="hljs-comment">// default block</span>
}
</code></pre>
<p><strong>Example</strong>:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> score = <span class="hljs-number">85</span>;

<span class="hljs-keyword">if</span> (score &gt;= <span class="hljs-number">90</span>) {
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Grade A"</span>);
} <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (score &gt;= <span class="hljs-number">80</span>) {
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Grade B"</span>);
} <span class="hljs-keyword">else</span> {
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Grade C"</span>);
}
</code></pre>
<p><strong><mark>4. </mark></strong> <code>switch</code> <strong><mark> Statement</mark></strong></p>
<p>Used when you have multiple conditions based on <strong>one variable</strong>.</p>
<p><strong>Syntax:</strong></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">switch</span> (expression) {
  <span class="hljs-keyword">case</span> value1:
    <span class="hljs-comment">// block</span>
    <span class="hljs-keyword">break</span>;
  <span class="hljs-keyword">case</span> value2:
    <span class="hljs-comment">// block</span>
    <span class="hljs-keyword">break</span>;
  <span class="hljs-keyword">default</span>:
    <span class="hljs-comment">// default block</span>
}
</code></pre>
<p><strong>Example:</strong></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> day = <span class="hljs-string">"Tuesday"</span>;

<span class="hljs-keyword">switch</span> (day) {
  <span class="hljs-keyword">case</span> <span class="hljs-string">"Monday"</span>:
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Start of the week"</span>);
    <span class="hljs-keyword">break</span>;
  <span class="hljs-keyword">case</span> <span class="hljs-string">"Tuesday"</span>:
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Second day of the week"</span>);
    <span class="hljs-keyword">break</span>;
  <span class="hljs-keyword">default</span>:
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Some other day"</span>);
}
</code></pre>
<p><strong><mark>5. Ternary Operator (</mark></strong><code>? :</code><strong><mark>)</mark></strong></p>
<p>A <strong>short-hand</strong> for <code>if...else</code>.</p>
<p><strong>Syntax:</strong></p>
<pre><code class="lang-javascript">condition ? expression_if_true : expression_if_false;
</code></pre>
<p><strong>Example:</strong></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> age = <span class="hljs-number">20</span>;

<span class="hljs-keyword">let</span> result = (age &gt;= <span class="hljs-number">18</span>) ? <span class="hljs-string">"Adult"</span> : <span class="hljs-string">"Minor"</span>;
<span class="hljs-built_in">console</span>.log(result); <span class="hljs-comment">// "Adult"</span>
</code></pre>
<p><strong><mark>Nested Conditionals</mark></strong></p>
<p><strong>Example:</strong></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> num = <span class="hljs-number">5</span>;

<span class="hljs-keyword">if</span> (num &gt; <span class="hljs-number">0</span>) {
  <span class="hljs-keyword">if</span> (num % <span class="hljs-number">2</span> === <span class="hljs-number">0</span>) {
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Positive even number"</span>);
  } <span class="hljs-keyword">else</span> {
    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Positive odd number"</span>);
  }
}
</code></pre>
<p><strong>Summary Table</strong></p>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Statement</strong></td><td><strong>Use Case</strong></td><td><strong>Short Note</strong></td></tr>
</thead>
<tbody>
<tr>
<td><code>if</code></td><td>One condition</td><td>Simple true/false check</td></tr>
<tr>
<td><code>if...else</code></td><td>Two outcomes</td><td>True → one block, False → another</td></tr>
<tr>
<td><code>else if</code></td><td>Multiple conditions</td><td>Used for checking multiple cases</td></tr>
<tr>
<td><code>switch</code></td><td>One variable, multiple fixed values</td><td>Good alternative to <code>else if</code> chain</td></tr>
<tr>
<td><code>ternary</code></td><td>Simple one-line decision</td><td>Short-hand for <code>if...else</code></td></tr>
</tbody>
</table>
</div><hr />
<h2 id="heading-loop">Loop</h2>
<p><strong>Loops</strong> are used to <strong>execute a block of code repeatedly</strong> as long as a certain condition is true.</p>
<p><strong><mark>1. </mark></strong> <code>for</code> <strong><mark> Loop</mark></strong></p>
<p><strong>Syntax:</strong></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">for</span> (initialization; condition; update) {
  <span class="hljs-comment">// code block to execute</span>
}
</code></pre>
<p><strong>Example:</strong></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">for</span> (<span class="hljs-keyword">let</span> i = <span class="hljs-number">1</span>; i &lt;= <span class="hljs-number">5</span>; i++) {
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Number: "</span> + i);
}
<span class="hljs-comment">/*
Number: 1
Number: 2
Number: 3
Number: 4
Number: 5
+/</span>
</code></pre>
<p><strong><mark>2. </mark></strong> <code>while</code> <strong><mark> Loop</mark></strong></p>
<p><strong>Syntax:</strong></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">while</span> (condition) {
  <span class="hljs-comment">// code block</span>
}
</code></pre>
<p><strong>Example:</strong></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> i = <span class="hljs-number">1</span>;
<span class="hljs-keyword">while</span> (i &lt;= <span class="hljs-number">3</span>) {
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Hello"</span>);
  i++;
}

<span class="hljs-comment">/* 
Hello
Hello
Hello
+/</span>
</code></pre>
<p><strong>3.</strong> <code>do...while</code> <strong>Loop</strong></p>
<p>Executes the block <strong>at least once</strong>, then checks the condition.</p>
<p><strong>Syntax:</strong></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">do</span> {
  <span class="hljs-comment">// code block</span>
} <span class="hljs-keyword">while</span> (condition);
</code></pre>
<p><strong>Example:</strong></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> i = <span class="hljs-number">1</span>;
<span class="hljs-keyword">do</span> {
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Value is: "</span> + i);
  i++;
} <span class="hljs-keyword">while</span> (i &lt;= <span class="hljs-number">2</span>);

<span class="hljs-comment">/*
Value is: 1
Value is: 2
+/</span>
</code></pre>
<p><strong><mark>4. </mark></strong> <code>for...in</code> <strong><mark> Loop</mark></strong></p>
<p>Used to <strong>iterate over object properties</strong>.</p>
<p><strong>Example</strong>:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">const</span> person = { <span class="hljs-attr">name</span>: <span class="hljs-string">"Alice"</span>, <span class="hljs-attr">age</span>: <span class="hljs-number">25</span> };

<span class="hljs-keyword">for</span> (<span class="hljs-keyword">let</span> key <span class="hljs-keyword">in</span> person) {
  <span class="hljs-built_in">console</span>.log(key + <span class="hljs-string">": "</span> + person[key]);
}

<span class="hljs-comment">/* 
name: Alice
age: 25
*/</span>
</code></pre>
<p><strong><mark>5. </mark></strong> <code>for...of</code> <strong><mark> Loop</mark></strong></p>
<p>Used to <strong>iterate over iterable values</strong> (like arrays, strings).</p>
<p><strong>Example:</strong></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> fruits = [<span class="hljs-string">"apple"</span>, <span class="hljs-string">"banana"</span>, <span class="hljs-string">"cherry"</span>];

<span class="hljs-keyword">for</span> (<span class="hljs-keyword">let</span> fruit <span class="hljs-keyword">of</span> fruits) {
  <span class="hljs-built_in">console</span>.log(fruit);
}

<span class="hljs-comment">/* 
apple
banana
cherry
*/</span>
</code></pre>
<p><strong><mark>6. </mark></strong> <code>break</code> <strong><mark> and </mark></strong> <code>continue</code></p>
<ul>
<li><p><code>break</code> → Exits the loop.</p>
</li>
<li><p><code>continue</code> → Skips the current iteration and moves to the next.</p>
</li>
</ul>
<p><strong>Example (</strong><code>break</code><strong>):</strong></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">for</span> (<span class="hljs-keyword">let</span> i = <span class="hljs-number">1</span>; i &lt;= <span class="hljs-number">5</span>; i++) {
  <span class="hljs-keyword">if</span> (i === <span class="hljs-number">3</span>) <span class="hljs-keyword">break</span>;
  <span class="hljs-built_in">console</span>.log(i);
}

<span class="hljs-comment">/* 
1
2
*/</span>
</code></pre>
<p><strong>Example (</strong><code>continue</code><strong>):</strong></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">for</span> (<span class="hljs-keyword">let</span> i = <span class="hljs-number">1</span>; i &lt;= <span class="hljs-number">5</span>; i++) {
  <span class="hljs-keyword">if</span> (i === <span class="hljs-number">3</span>) <span class="hljs-keyword">continue</span>;
  <span class="hljs-built_in">console</span>.log(i);
}

<span class="hljs-comment">/*
1
2
4
5
*/</span>
</code></pre>
<p><strong>Loop Comparison Table</strong></p>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Loop Type</strong></td><td><strong>Used For</strong></td><td><strong>Executes At Least Once?</strong></td></tr>
</thead>
<tbody>
<tr>
<td><code>for</code></td><td>Known number of iterations</td><td>❌</td></tr>
<tr>
<td><code>while</code></td><td>Condition-based looping</td><td>❌</td></tr>
<tr>
<td><code>do...while</code></td><td>At least one run, then condition</td><td>✅</td></tr>
<tr>
<td><code>for...in</code></td><td>Loop through object keys</td><td>❌</td></tr>
<tr>
<td><code>for...of</code></td><td>Loop through iterable values</td><td>❌</td></tr>
</tbody>
</table>
</div><hr />
<h2 id="heading-array">Array</h2>
<p>An <strong>array</strong> is a special variable in JavaScript that can hold <strong>multiple values</strong> in a single variable.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> fruits = [<span class="hljs-string">"apple"</span>, <span class="hljs-string">"banana"</span>, <span class="hljs-string">"cherry"</span>];
</code></pre>
<p><strong>How to Declare an Array</strong></p>
<pre><code class="lang-javascript"><span class="hljs-comment">// Using square brackets</span>
<span class="hljs-keyword">let</span> colors = [<span class="hljs-string">"red"</span>, <span class="hljs-string">"blue"</span>, <span class="hljs-string">"green"</span>];

<span class="hljs-comment">// Using the Array constructor</span>
<span class="hljs-keyword">let</span> numbers = <span class="hljs-keyword">new</span> <span class="hljs-built_in">Array</span>(<span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3</span>, <span class="hljs-number">4</span>);
</code></pre>
<p><strong>Accessing Array Elements</strong></p>
<p>Array indexing starts at <code>0</code>.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> animals = [<span class="hljs-string">"dog"</span>, <span class="hljs-string">"cat"</span>, <span class="hljs-string">"rabbit"</span>];

<span class="hljs-built_in">console</span>.log(animals[<span class="hljs-number">0</span>]); <span class="hljs-comment">// dog</span>
<span class="hljs-built_in">console</span>.log(animals[<span class="hljs-number">2</span>]); <span class="hljs-comment">// rabbit</span>
</code></pre>
<p><strong>Array Methods (Most Common)</strong></p>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Method</strong></td><td><strong>Description</strong></td><td><strong>Example</strong></td></tr>
</thead>
<tbody>
<tr>
<td><code>push()</code></td><td>Add to the <strong>end</strong></td><td><code>arr.push("item")</code></td></tr>
<tr>
<td><code>pop()</code></td><td>Remove from the <strong>end</strong></td><td><code>arr.pop()</code></td></tr>
<tr>
<td><code>shift()</code></td><td>Remove from the <strong>start</strong></td><td><code>arr.shift()</code></td></tr>
<tr>
<td><code>unshift()</code></td><td>Add to the <strong>start</strong></td><td><code>arr.unshift("item")</code></td></tr>
<tr>
<td><code>length</code></td><td>Get array length</td><td><code>arr.length</code></td></tr>
<tr>
<td><code>indexOf()</code></td><td>Find index of an item</td><td><code>arr.indexOf("item")</code></td></tr>
<tr>
<td><code>includes()</code></td><td>Check if array includes item</td><td><code>arr.includes("item")</code></td></tr>
<tr>
<td><code>slice(start, end)</code></td><td>Extract a portion of array</td><td><code>arr.slice(1, 3)</code></td></tr>
<tr>
<td><code>splice()</code></td><td>Add/Remove elements</td><td><code>arr.splice(2, 1, "newItem")</code></td></tr>
<tr>
<td><code>join()</code></td><td>Join all elements into a string</td><td><code>arr.join(", ")</code></td></tr>
<tr>
<td><code>reverse()</code></td><td>Reverse the array</td><td><code>arr.reverse()</code></td></tr>
<tr>
<td><code>sort()</code></td><td>Sort elements</td><td><code>arr.sort()</code></td></tr>
</tbody>
</table>
</div><p><strong>Looping Through Arrays -</strong></p>
<p><strong>Using</strong> <code>for</code> <strong>loop:</strong></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> fruits = [<span class="hljs-string">"apple"</span>, <span class="hljs-string">"banana"</span>, <span class="hljs-string">"cherry"</span>];

<span class="hljs-keyword">for</span> (<span class="hljs-keyword">let</span> i = <span class="hljs-number">0</span>; i &lt; fruits.length; i++) {
  <span class="hljs-built_in">console</span>.log(fruits[i]);
}
</code></pre>
<p><strong>Using</strong> <code>for...of</code><strong>:</strong></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">for</span>(<span class="hljs-keyword">let</span> fruit <span class="hljs-keyword">of</span> fruits) {
  <span class="hljs-built_in">console</span>.log(fruit);
}
</code></pre>
<p><strong>Using</strong> <code>forEach()</code><strong>:</strong></p>
<pre><code class="lang-javascript">fruits.forEach(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">fruit</span>) </span>{
  <span class="hljs-built_in">console</span>.log(fruit);
});
</code></pre>
<p><strong>Example</strong></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> scores = [<span class="hljs-number">10</span>, <span class="hljs-number">20</span>, <span class="hljs-number">30</span>, <span class="hljs-number">40</span>];

<span class="hljs-comment">// Add a score</span>
scores.push(<span class="hljs-number">50</span>);
<span class="hljs-comment">// [ 10, 20, 30, 40, 50 ]</span>

<span class="hljs-comment">// Remove first score</span>
scores.shift();
<span class="hljs-comment">//[ 20, 30, 40, 50 ]</span>

<span class="hljs-comment">// Find score</span>
<span class="hljs-built_in">console</span>.log(scores.includes(<span class="hljs-number">30</span>)); 
<span class="hljs-comment">// true</span>

<span class="hljs-comment">// Sum all scores</span>
<span class="hljs-keyword">let</span> sum = <span class="hljs-number">0</span>;
<span class="hljs-keyword">for</span> (<span class="hljs-keyword">let</span> score <span class="hljs-keyword">of</span> scores) {
  sum += score;
}
<span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Total:"</span>, sum);
<span class="hljs-comment">// Total: 140</span>
</code></pre>
<p><strong>Nested Arrays (2D Arrays)</strong></p>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> matrix = [
  [<span class="hljs-number">1</span>, <span class="hljs-number">2</span>],
  [<span class="hljs-number">3</span>, <span class="hljs-number">4</span>],
  [<span class="hljs-number">5</span>, <span class="hljs-number">6</span>]
];

<span class="hljs-built_in">console</span>.log(matrix); <span class="hljs-comment">//[ [ 1, 2 ], [ 3, 4 ], [ 5, 6 ] ]</span>
<span class="hljs-built_in">console</span>.log(matrix[<span class="hljs-number">1</span>][<span class="hljs-number">0</span>]); <span class="hljs-comment">// 3</span>
</code></pre>
<blockquote>
<p>JavaScript arrays are <strong>dynamic</strong> and <strong>can hold mixed data types</strong> (but avoid that in practice).</p>
</blockquote>
<pre><code class="lang-javascript"><span class="hljs-keyword">let</span> mixed = [<span class="hljs-number">1</span>, <span class="hljs-string">"hello"</span>, <span class="hljs-literal">true</span>, <span class="hljs-literal">null</span>];
</code></pre>
]]></content:encoded></item></channel></rss>