{"componentChunkName":"component---gatsby-theme-teklog-src-templates-post-tsx","path":"/modern-javascript-syntax-es6-const-variables","result":{"data":{"site":{"siteMetadata":{"siteUrl":"https://blog.tekmi.nl","author":{"name":"Teklog","avatar":"/img/tekmi-icon.svg"}}},"blogPost":{"frontmatter":{"title":"Modern JavaScript syntax - ES6 const variables","slug":"modern-javascript-syntax-es6-const-variables","series":null,"date":"2017-07-25","datePretty":"25 July, 2017","coverImage":{"childImageSharp":{"fixed":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAPABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAgQA/8QAFQEBAQAAAAAAAAAAAAAAAAAAAQL/2gAMAwEAAhADEAAAAU4XcVaDJ//EABgQAAMBAQAAAAAAAAAAAAAAAAABAxIR/9oACAEBAAEFAnnmDAtDrQd6n//EABcRAAMBAAAAAAAAAAAAAAAAAAABAhL/2gAIAQMBAT8BcGGf/8QAFxEAAwEAAAAAAAAAAAAAAAAAAAEDE//aAAgBAgEBPwFVNUf/xAAXEAEBAQEAAAAAAAAAAAAAAAAAMRAy/9oACAEBAAY/AtrpX//EABsQAAICAwEAAAAAAAAAAAAAAAABETEQIYFB/9oACAEBAAE/IWRG3ZspWDQUVNu/CR54f//aAAwDAQACAAMAAAAQBD//xAAVEQEBAAAAAAAAAAAAAAAAAAAQUf/aAAgBAwEBPxCIf//EABcRAQADAAAAAAAAAAAAAAAAAAABQWH/2gAIAQIBAT8Qhtg//8QAHRAAAgIBBQAAAAAAAAAAAAAAAREAITFRcZGh0f/aAAgBAQABPxCh4tKxvKgGCGI+kcy4Fm8YgycABdQigIFQeT//2Q==","width":1000,"height":750,"src":"/static/663522c6c6041af7ad69be5803580aeb/a7715/castleAndHorses.jpg","srcSet":"/static/663522c6c6041af7ad69be5803580aeb/a7715/castleAndHorses.jpg 1x"}}},"author":null,"authorAvatar":null},"timeToRead":4,"excerpt":"Introduction ES6 brought lots of new features. Among them is support for constants. Instead of using var while declaring variables, you are now free…","html":"<h2 id=\"introduction\" style=\"position:relative;\"><a href=\"#introduction\" aria-label=\"introduction permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Introduction</h2>\n<p>ES6 brought lots of new features. Among them is support for constants. Instead of using <strong>var</strong> while declaring variables, you are now free to choose between <strong>const</strong> and <strong>let</strong>.</p>\n<p>In this tutorial I will focus primarily on <strong>const</strong> and its \"immutability\" quirks, while <strong>let</strong> will be tackled in the following one. Without further ado, let's start it off by going through the handful of examples.</p>\n<h2 id=\"assumptions\" style=\"position:relative;\"><a href=\"#assumptions\" aria-label=\"assumptions permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Assumptions</h2>\n<ul>\n<li>Familiarity with Codepen, JSFiddle or JSBin</li>\n<li>Familiarity with Browser Developer Tools</li>\n</ul>\n<h2 id=\"example-i---primitive\" style=\"position:relative;\"><a href=\"#example-i---primitive\" aria-label=\"example i   primitive permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Example I - Primitive</h2>\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 constant\">PI</span> <span class=\"token operator\">=</span> <span class=\"token number\">3.14</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// Not possible, because initial value is missing</span>\n<span class=\"token comment\">// const PI;</span>\n\n<span class=\"token comment\">// Not possible to reassign</span>\n<span class=\"token comment\">// PI = 3.12;</span>\n\n<span class=\"token comment\">// Not possible to redeclare</span>\n<span class=\"token comment\">// var PI = 3.14159265359</span>\n\n<span class=\"token comment\">// Possible in IIFE, because it is in different context</span>\n<span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> <span class=\"token constant\">PI</span> <span class=\"token operator\">=</span> <span class=\"token number\">3.14159265359</span><span class=\"token punctuation\">;</span>\n  <span class=\"token comment\">// Will output 3.14159265359</span>\n  console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token constant\">PI</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// Possible, because it's in different block scope</span>\n<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token boolean\">true</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n <span class=\"token keyword\">const</span> <span class=\"token constant\">PI</span> <span class=\"token operator\">=</span> <span class=\"token number\">3.14159</span><span class=\"token punctuation\">;</span>\n <span class=\"token comment\">// Will output 3.14159</span>\n console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token constant\">PI</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token comment\">// Not possible, because var variable gets hoisted </span>\n<span class=\"token comment\">// if (true) { var PI = 3.14159; }</span>\n\n<span class=\"token comment\">// Will output 3.14</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token constant\">PI</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>As you see, you must assign an initial value to const variable. Additionally, you cannot redeclare it, nor assign a new value, unless it's in different scope. Similar rules apply to variables of type string, integer, float and so on, as well as to variables holding a function expressions. (<code class=\"language-javascript\"><span class=\"token keyword\">const</span> <span class=\"token function-variable function\">f</span> <span class=\"token operator\">=</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span> <span class=\"token keyword\">return</span> <span class=\"token string\">'sth'</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">}</span></code>)</p>\n<h2 id=\"example-ii---array\" style=\"position:relative;\"><a href=\"#example-ii---array\" aria-label=\"example ii   array permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Example II - Array</h2>\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 constant\">PLANETS</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token string\">'Mercury'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'Venus'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'Earth'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'Mars'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// Not possible to reassign</span>\n<span class=\"token comment\">// PLANETS = ['Mercury'];</span>\n\n<span class=\"token comment\">// Not possible to redeclare</span>\n<span class=\"token comment\">// var PLANETS = [];</span>\n\n<span class=\"token constant\">PLANETS</span><span class=\"token punctuation\">[</span><span class=\"token number\">5</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token string\">'Saturn'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">delete</span> <span class=\"token constant\">PLANETS</span><span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n<span class=\"token comment\">// Will output [undefined, 'Venus', 'Earth', 'Mars', undefined, 'Saturn'] </span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token constant\">PLANETS</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token constant\">PLANETS</span><span class=\"token punctuation\">.</span><span class=\"token function\">push</span><span class=\"token punctuation\">(</span><span class=\"token string\">'Jupiter'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token comment\">// Will output [undefined, \"Venus\", \"Earth\", \"Mars\", undefined, \"Saturn\", \"Jupiter\"]</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token constant\">PLANETS</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token constant\">PLANETS</span><span class=\"token punctuation\">.</span><span class=\"token function\">pop</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token constant\">PLANETS</span><span class=\"token punctuation\">.</span><span class=\"token function\">pop</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token constant\">PLANETS</span><span class=\"token punctuation\">.</span><span class=\"token function\">pop</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token constant\">PLANETS</span><span class=\"token punctuation\">.</span><span class=\"token function\">shift</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token comment\">// Will output [\"Venus\", \"Earth\", \"Mars\"]</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token constant\">PLANETS</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token constant\">PLANETS</span><span class=\"token punctuation\">.</span><span class=\"token function\">unshift</span><span class=\"token punctuation\">(</span><span class=\"token string\">'MERCURY'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token comment\">// Will output [\"MERCURY\", \"Venus\", \"Earth\", \"Mars\"]</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token constant\">PLANETS</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token constant\">PLANETS</span><span class=\"token punctuation\">.</span>length <span class=\"token operator\">=</span> <span class=\"token number\">6</span><span class=\"token punctuation\">;</span>\n<span class=\"token comment\">// Will output [\"MERCURY\", \"Venus\", \"Earth\", \"Mars\", undefined, undefined]</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token constant\">PLANETS</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token constant\">PLANETS</span><span class=\"token punctuation\">.</span>length <span class=\"token operator\">=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n<span class=\"token comment\">// Will output [\"MERCURY\"]</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token constant\">PLANETS</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>As you see, you cannot reassign anything to <em>PLANETS</em> nor redeclare it, pretty similar as for primitives. However you can modify, add or delete elements inside this array, which may seems a bit awkward at first.</p>\n<h2 id=\"example-iii---object\" style=\"position:relative;\"><a href=\"#example-iii---object\" aria-label=\"example iii   object permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Example III - Object</h2>\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 constant\">PERSON</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  name<span class=\"token operator\">:</span> <span class=\"token string\">'John'</span><span class=\"token punctuation\">,</span>\n  surname<span class=\"token operator\">:</span> <span class=\"token string\">'Doe'</span><span class=\"token punctuation\">,</span>\n  age<span class=\"token operator\">:</span> <span class=\"token number\">30</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// Not possible to reassign</span>\n<span class=\"token comment\">// PERSON = {};</span>\n\n<span class=\"token comment\">// Not possible to redeclare</span>\n<span class=\"token comment\">// var PERSON = {};</span>\n\n<span class=\"token constant\">PERSON</span><span class=\"token punctuation\">[</span><span class=\"token string\">'name'</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token string\">'Adam'</span><span class=\"token punctuation\">;</span>\n<span class=\"token constant\">PERSON</span><span class=\"token punctuation\">[</span><span class=\"token string\">'children'</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">delete</span> <span class=\"token constant\">PERSON</span><span class=\"token punctuation\">[</span><span class=\"token string\">'age'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n<span class=\"token comment\">// Will output Object { children=1, name=\"Adam\", surname=\"Doe\" }</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token constant\">PERSON</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Like arrays, you cannot reassign anything to <em>PERSON</em> object nor redeclare it, but you can freely modify, add or delete any properties inside this object.</p>\n<p>If you truly need an immutable object or array, you may use <code class=\"language-text\">Object.freeze</code> as shown below.</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 constant\">PERSON</span> <span class=\"token operator\">=</span> Object<span class=\"token punctuation\">.</span><span class=\"token function\">freeze</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n  name<span class=\"token operator\">:</span> <span class=\"token string\">'John'</span><span class=\"token punctuation\">,</span>\n  surname<span class=\"token operator\">:</span> <span class=\"token string\">'Doe'</span><span class=\"token punctuation\">,</span>\n  age<span class=\"token operator\">:</span> <span class=\"token number\">30</span><span class=\"token punctuation\">,</span>\n  birthday<span class=\"token operator\">:</span> Object<span class=\"token punctuation\">.</span><span class=\"token function\">freeze</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n    day<span class=\"token operator\">:</span> <span class=\"token number\">3</span><span class=\"token punctuation\">,</span>\n    month<span class=\"token operator\">:</span> <span class=\"token number\">8</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token constant\">PERSON</span><span class=\"token punctuation\">[</span><span class=\"token string\">'name'</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token string\">'Adam'</span><span class=\"token punctuation\">;</span>\n<span class=\"token constant\">PERSON</span><span class=\"token punctuation\">[</span><span class=\"token string\">'birthday'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span><span class=\"token string\">'year'</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token number\">1980</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// Will output Object {name=\"John\", surname=\"Doe\", age=30, Object {day=3, month=8}}</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">dir</span><span class=\"token punctuation\">(</span><span class=\"token constant\">PERSON</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\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 constant\">CARS</span> <span class=\"token operator\">=</span> Object<span class=\"token punctuation\">.</span><span class=\"token function\">freeze</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span>\n  Object<span class=\"token punctuation\">.</span><span class=\"token function\">freeze</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span><span class=\"token string\">'BMW 3'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'BMW 5'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">[</span><span class=\"token string\">'VW Golf'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'VW Toureg'</span><span class=\"token punctuation\">]</span>\n<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// Not possible</span>\n<span class=\"token comment\">// CARS[0].push('BMW 7');</span>\n\n<span class=\"token constant\">CARS</span><span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">.</span><span class=\"token function\">push</span><span class=\"token punctuation\">(</span><span class=\"token string\">'VW Polo'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token comment\">// Will output [[\"BMW 3\", \"BMW 5\"], [\"VW Golf\", \"VW Toureg\", \"VW Polo\"]]</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token constant\">CARS</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Keep in mind though that freeze is a shallow operation, so you need to repeat it in all of your child objects and arrays.</p>\n<p>Alternatively, you could use <code class=\"language-text\">Object.seal</code> that allows changes of the existing properties, but forbids to add new ones.</p>\n<h2 id=\"es5-equivalent\" style=\"position:relative;\"><a href=\"#es5-equivalent\" aria-label=\"es5 equivalent permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>ES5 equivalent</h2>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">Object<span class=\"token punctuation\">.</span><span class=\"token function\">defineProperty</span><span class=\"token punctuation\">(</span>window<span class=\"token punctuation\">,</span> <span class=\"token string\">\"PI\"</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span>\n  value<span class=\"token operator\">:</span> <span class=\"token number\">3.141593</span><span class=\"token punctuation\">,</span>\n  enumerable<span class=\"token operator\">:</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">,</span>\n  writable<span class=\"token operator\">:</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">,</span>\n  configurable<span class=\"token operator\">:</span> <span class=\"token boolean\">false</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>Once you run this, you actually won't be able to undo this action.</p>\n<ul>\n<li>it's forbidden to redefine <code class=\"language-javascript\">window<span class=\"token punctuation\">.</span><span class=\"token constant\">PI</span></code> using <code class=\"language-text\">Object.defineProperty</code> again</li>\n<li>it's impossible to delete it via <code class=\"language-javascript\"><span class=\"token keyword\">delete</span> window<span class=\"token punctuation\">.</span><span class=\"token constant\">PI</span></code></li>\n</ul>\n<p>It turns out you can only refresh your page to get this value cleaned up. Feel free to learn more about <a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty\">Object.defineProperty</a>.</p>\n<h2 id=\"summary\" style=\"position:relative;\"><a href=\"#summary\" aria-label=\"summary permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Summary</h2>\n<p>Variables defined as constants work predictable and well with primitives as strings, integers or floats. However they should be used with caution when applied to arrays or objects. People mostly assume const variables as immutable, but in the world of JavaScript the reality is different.</p>\n<p>There is lots of documents, tutorials, videos and books related to ES6 constants, including the following:</p>\n<ul>\n<li><a href=\"http://www.ecma-international.org/ecma-262/6.0/index.html#sec-let-and-const-declarations\">ECMA-262 - Let and Const Declaration</a></li>\n<li><a href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const\">MDN - const</a></li>\n<li><a href=\"http://es6-features.org/#Constants\">ES6 Features - Constants</a></li>\n<li><a href=\"http://amzn.to/2uUM41T\">Practical Modern JavaScript - Chapter: ES6 Essentials</a></li>\n<li><a href=\"http://amzn.to/2uuPyar\">JavaScript: The Definitive Guide - Chapter: Constants and Scoped Variables</a></li>\n<li><a href=\"http://amzn.to/2eLA1gI\">Understanding ECMAScript6 - Chapter: Block Bindings</a></li>\n<li><a href=\"https://laracasts.com/series/es6-cliffsnotes/episodes/3\">Laracasts - ES2015 Crash Course: To Var, Let or Const</a></li>\n</ul>\n<p>If you stumbled across any other interesting materials, please let me know via Twitter.</p>\n<p>I tend to declare <em>const variables</em> using capital letters. Additionally, I default to <strong>const</strong> every time I declare a new variable. If I need to reassign it later on, I simply change it to <strong>let</strong>, therefore trying to stay away from <em>var variables</em>.</p>\n<h2 id=\"code-samples\" style=\"position:relative;\"><a href=\"#code-samples\" aria-label=\"code samples permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Code samples</h2>\n<ul>\n<li><a href=\"https://github.com/tekmi/blogging-modernjs\">https://github.com/tekmi/blogging-modernjs</a></li>\n<li><a href=\"https://jsfiddle.net/tekmi/rm8hyq8n/\">https://jsfiddle.net/tekmi/rm8hyq8n/</a></li>\n<li><a href=\"https://codepen.io/tekmi/pen/MvWwQe?editors=0011\">https://codepen.io/tekmi/pen/MvWwQe?editors=0011</a></li>\n<li><a href=\"https://jsbin.com/huvarig/1/edit?js,console\">https://jsbin.com/huvarig/1/edit?js,console</a></li>\n</ul>"}},"pageContext":{"postId":"45265cd7-84c1-5eb3-9356-a69450e8bb2d","slug":"modern-javascript-syntax-es6-const-variables"}}}