{"componentChunkName":"component---src-templates-blog-post-js","path":"/spread-rest-operator/","result":{"data":{"site":{"siteMetadata":{"title":"TheKrPrince Blog"}},"markdownRemark":{"id":"ff02e049-b558-533f-a248-3813a0d24beb","excerpt":"Hi Everyone, This is my first blog. And in this blog, I’m gonna talk about Spread Operator, Rest Operator and Destructuring in JavaScript, and as I have been…","html":"<p>Hi Everyone,</p>\n<p>This is my first blog. And in this blog, I’m gonna talk about <strong>Spread Operator, Rest Operator</strong> and <strong>Destructuring</strong> in JavaScript, and as I have been working on JavaScript since 1 year, I used to think that spread operator is used for destructuring. While working on a project recently I found out that concept of destructuring is completely different and thought of sharing it here. So, Let’s begin.</p>\n<h2>Spread Operator</h2>\n<p>The spread operator is used to split up array elements or object properties. It does deep cloning of the array elements or object, so it doesn’t affect the original values.\nLet’s see the Example of Array first-</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> arr1 <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">]</span>\n<span class=\"token keyword\">const</span> arr2 <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token operator\">...</span>arr1<span class=\"token punctuation\">,</span> <span class=\"token number\">4</span><span class=\"token punctuation\">,</span> <span class=\"token number\">5</span><span class=\"token punctuation\">]</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>arr1<span class=\"token punctuation\">)</span> <span class=\"token comment\">// [1, 2, 3]</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>arr2<span class=\"token punctuation\">)</span> <span class=\"token comment\">// [1, 2, 3, 4, 5]</span>\narr1<span class=\"token punctuation\">.</span><span class=\"token function\">push</span><span class=\"token punctuation\">(</span><span class=\"token number\">6</span><span class=\"token punctuation\">,</span> <span class=\"token number\">7</span><span class=\"token punctuation\">)</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>arr1<span class=\"token punctuation\">)</span> <span class=\"token comment\">// [1, 2, 3, 6, 7]</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>arr2<span class=\"token punctuation\">)</span> <span class=\"token comment\">// [1, 2, 3, 4, 5]</span></code></pre></div>\n<p>You can see above that <strong>arr2</strong> hasn’t changed after adding more values to <strong>arr1</strong>.\nBut what if I hadn’t provided the ”…” operator in <strong>arr2</strong>. Let’s find out below-</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> arr1 <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">]</span>\n<span class=\"token keyword\">const</span> arr2 <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>arr1<span class=\"token punctuation\">,</span> <span class=\"token number\">4</span><span class=\"token punctuation\">,</span> <span class=\"token number\">5</span><span class=\"token punctuation\">]</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>arr1<span class=\"token punctuation\">)</span> <span class=\"token comment\">// [1, 2, 3]</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>arr2<span class=\"token punctuation\">)</span> <span class=\"token comment\">// [[1, 2, 3], 4, 5]</span></code></pre></div>\n<p>Yes. It would create a nested array.</p>\n<p>Same goes with the objects as well.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> obj1 <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  name<span class=\"token operator\">:</span> <span class=\"token string\">\"Prince\"</span><span class=\"token punctuation\">,</span>\n  Sex<span class=\"token operator\">:</span> <span class=\"token string\">\"Male\"</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>obj1<span class=\"token punctuation\">)</span> <span class=\"token comment\">//{name: \"Prince\", sex: \"male\"}</span>\n\n<span class=\"token keyword\">const</span> obj2 <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token operator\">...</span>obj1<span class=\"token punctuation\">,</span>\n  age<span class=\"token operator\">:</span> <span class=\"token number\">25</span><span class=\"token punctuation\">,</span> <span class=\"token comment\">//{age: 25, name: \"Prince\", sex: \"male}</span>\n<span class=\"token punctuation\">}</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>obj2<span class=\"token punctuation\">)</span>\n\nobj1<span class=\"token punctuation\">[</span><span class=\"token string\">\"height\"</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token string\">\"5'8 ft\"</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>obj1<span class=\"token punctuation\">)</span> <span class=\"token comment\">//{height: \"5'8 ft\",name: \"Prince\", sex: \"male\"}</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>obj2<span class=\"token punctuation\">)</span> <span class=\"token comment\">//{age: 25, name: \"Prince\", sex: \"male}</span></code></pre></div>\n<h2>Rest Operator</h2>\n<p>Rest operator is used in a function whenever multiple arguments are expected.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">const</span> <span class=\"token function-variable function\">filter</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\"><span class=\"token operator\">...</span>args</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> args<span class=\"token punctuation\">.</span><span class=\"token function\">filter</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">val</span> <span class=\"token operator\">=></span> val <span class=\"token operator\">%</span> <span class=\"token number\">5</span> <span class=\"token operator\">===</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span>\n\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token function\">filter</span><span class=\"token punctuation\">(</span><span class=\"token number\">5</span><span class=\"token punctuation\">,</span> <span class=\"token number\">10</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">4</span><span class=\"token punctuation\">,</span> <span class=\"token number\">20</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token comment\">// [5, 10, 20]</span></code></pre></div>\n<p>You can see above that we are passing 5 arguments while calling filter function and it’s printing the value according to the condition and even we can pass <strong>n number</strong> of argument and it’ll work just fine.</p>\n<h2>Destructuring</h2>\n<p>It’s also next gen javascript feature. Destructuring easily extract array elements or object properties and store them in variables.\nBy the above definition, you’d have been thinking that It works exactly as spread operator but It’s work differently.\nLet’s find out below.-</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\">// Array</span>\n<span class=\"token keyword\">const</span> num <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">11</span><span class=\"token punctuation\">,</span> <span class=\"token number\">22</span><span class=\"token punctuation\">,</span> <span class=\"token number\">33</span><span class=\"token punctuation\">]</span>\n<span class=\"token punctuation\">;</span><span class=\"token punctuation\">[</span>x<span class=\"token punctuation\">,</span> y<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> num\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">)</span> <span class=\"token comment\">// 11</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>y<span class=\"token punctuation\">)</span> <span class=\"token comment\">// 22</span>\n<span class=\"token punctuation\">;</span><span class=\"token punctuation\">[</span>x<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">,</span> y<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> num\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">)</span> <span class=\"token comment\">// 11</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>y<span class=\"token punctuation\">)</span> <span class=\"token comment\">// 33</span></code></pre></div>\n<p>When destructuring array, It’ll return the value of the index as per left key indexing. And yes, we’re not creating any array when writing like [x,y] on the left side. I know, it seems strange but even I was confused earlier.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\">// Object</span>\n<span class=\"token punctuation\">{</span>name<span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n    name<span class=\"token operator\">:</span> <span class=\"token string\">\"Audi\"</span><span class=\"token punctuation\">,</span>\n    model<span class=\"token operator\">:</span> <span class=\"token string\">\"A8\"</span><span class=\"token punctuation\">,</span>\n    price<span class=\"token operator\">:</span> <span class=\"token string\">\"1.5 cr\"</span>\n<span class=\"token punctuation\">}</span>\n\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>name<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>                          <span class=\"token comment\">// \"Audi\"</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>age<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>                           <span class=\"token comment\">// undefined</span>\n<span class=\"token comment\">// Above output will be undefined as age is not destructured and aligned with the same key</span></code></pre></div>\n<p>You can see above that age is returning <strong>undefined</strong> as It’s not destructured and aligned with the same key.</p>\n<p>That’s it for this article folks. 🙏Thanks For Reading.</p>","frontmatter":{"title":"Spread operator, Rest operator & Destructuring in JS","date":"May 09, 2021","description":"Difference b/w Spread operator, Rest operator and Destructuring in JavaScript."}},"previous":null,"next":{"fields":{"slug":"/git-for-beginners/"},"frontmatter":{"title":"Git for beginners"}}},"pageContext":{"id":"ff02e049-b558-533f-a248-3813a0d24beb","previousPostId":null,"nextPostId":"fa47de01-9c7e-5d73-8d3c-aa6e896efc88"}},"staticQueryHashes":["2841359383","3257411868"]}