ES6 brings a lot of great features to Javascript. In this article, let’s explore the features that can help us write code more efficiently. The article is for people who are learning JS like me.
ECMAScript, or ES6, was published in June 2015. It was later renamed ECMAScript 2015.
1. Const and let
Before ES6, to declare variables we used the var
keyword. However, it had a scope related problem. Since var
has no block scope, this leads to unexpected situations, for example:
1 2 3 4 5 6 | <span class="token keyword">var</span> company <span class="token operator">=</span> <span class="token string">'Sun Asterisk'</span> <span class="token punctuation">;</span> <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> <span class="token keyword">var</span> company <span class="token operator">=</span> <span class="token string">'Framgia'</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> company <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Framgia</span> |
We will have problems in large projects with thousands of lines of code, we don’t know the company
was declared before, so if we re-declare the variable of the same name in the if statement, it will unfortunately lead to change the value of the company variable in global scope.
That’s why we’ll replace it with let
and const
, the above example should work properly like this:
1 2 3 4 5 6 | <span class="token keyword">let</span> company <span class="token operator">=</span> <span class="token string">'Sun Asterisk'</span> <span class="token punctuation">;</span> <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> <span class="token keyword">let</span> company <span class="token operator">=</span> <span class="token string">'Framgia'</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> company <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Sun Asterisk</span> |
Now, if you define the same variable name, then there is no problem because the company
is in two different scopes.
2. Arrow function
Today, modern programming languages all tend to simplify the way of writing but still fulfill the task. Arrow function was born to help make code more concise. Before the arrow function existed, we used to write the following:
1 2 3 4 5 6 | <span class="token keyword">function</span> <span class="token function">sayGreeting</span> <span class="token punctuation">(</span> <span class="token parameter">name</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">'Hello '</span> <span class="token operator">+</span> name <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token function">sayGreeting</span> <span class="token punctuation">(</span> <span class="token string">'Sunner'</span> <span class="token punctuation">)</span> |
With the arrow function:
1 2 3 4 | <span class="token keyword">function</span> <span class="token function-variable function">sayGreeting</span> <span class="token operator">=</span> <span class="token parameter">name</span> <span class="token operator">=></span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">'Hello '</span> <span class="token operator">+</span> name <span class="token punctuation">)</span> <span class="token function">sayGreeting</span> <span class="token punctuation">(</span> <span class="token string">'Sunner'</span> <span class="token punctuation">)</span> |
3. The “Rest” parameter
Let’s see the following example:
1 2 3 4 5 6 7 8 9 10 11 | <span class="token keyword">function</span> <span class="token function">something</span> <span class="token punctuation">(</span> <span class="token parameter">a <span class="token punctuation">,</span> b <span class="token punctuation">,</span> <span class="token operator">...</span> numbers</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"a: "</span> <span class="token punctuation">,</span> a <span class="token punctuation">)</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"b: "</span> <span class="token punctuation">,</span> b <span class="token punctuation">)</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">"numbers: "</span> <span class="token punctuation">,</span> numbers <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token function">something</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> <span class="token number">5</span> <span class="token punctuation">)</span> <span class="token comment">// a: 1</span> <span class="token comment">// b: 2</span> <span class="token comment">// numbers: [3, 5]</span> |
As can be seen the … prefix of the last parameter will be stored in an array, numbers
is called the rest parameter
4. Template literals
Template literals are strings that you can wrap and use with an interpolated expression, of type ${variable_name}
. To create template literals we use a (instead of ” or “” as a regular string).
For example:
1 2 3 | <span class="token keyword">const</span> name <span class="token operator">=</span> <span class="token string">"Sunner"</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">We are </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> sunner <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> |
5. Promises
Promises allow you to pause a function until the previous functions have been executed, which is used when we are processing a sequence of actions in sequence. Without Promise, we use the callback but the callback has many limitations so no one likes to use it.
For example:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <span class="token comment">// add two numbers remotely using observable</span> <span class="token keyword">let</span> resultA <span class="token punctuation">,</span> resultB <span class="token punctuation">,</span> resultC <span class="token punctuation">;</span> <span class="token keyword">function</span> <span class="token function">addAsync</span> <span class="token punctuation">(</span> <span class="token parameter">num1 <span class="token punctuation">,</span> num2</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// use ES6 fetch API, which return a promise</span> <span class="token comment">// What is .json()? https://developer.mozilla.org/en-US/docs/Web/API/Body/json</span> <span class="token keyword">return</span> <span class="token function">fetch</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">http://www.example.com?num1=</span> <span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> num1 <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token string">&num2=</span> <span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> num2 <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">then</span> <span class="token punctuation">(</span> <span class="token parameter">x</span> <span class="token operator">=></span> x <span class="token punctuation">.</span> <span class="token function">json</span> <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> <span class="token function">addAsync</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 punctuation">.</span> <span class="token function">then</span> <span class="token punctuation">(</span> <span class="token parameter">success</span> <span class="token operator">=></span> <span class="token punctuation">{</span> resultA <span class="token operator">=</span> success <span class="token punctuation">;</span> <span class="token keyword">return</span> resultA <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">then</span> <span class="token punctuation">(</span> <span class="token parameter">success</span> <span class="token operator">=></span> <span class="token function">addAsync</span> <span class="token punctuation">(</span> success <span class="token punctuation">,</span> <span class="token number">3</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">then</span> <span class="token punctuation">(</span> <span class="token parameter">success</span> <span class="token operator">=></span> <span class="token punctuation">{</span> resultB <span class="token operator">=</span> success <span class="token punctuation">;</span> <span class="token keyword">return</span> resultB <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">then</span> <span class="token punctuation">(</span> <span class="token parameter">success</span> <span class="token operator">=></span> <span class="token function">addAsync</span> <span class="token punctuation">(</span> success <span class="token punctuation">,</span> <span class="token number">4</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">then</span> <span class="token punctuation">(</span> <span class="token parameter">success</span> <span class="token operator">=></span> <span class="token punctuation">{</span> resultC <span class="token operator">=</span> success <span class="token punctuation">;</span> <span class="token keyword">return</span> resultC <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">then</span> <span class="token punctuation">(</span> <span class="token parameter">success</span> <span class="token operator">=></span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">'total: '</span> <span class="token operator">+</span> success <span class="token punctuation">)</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> resultA <span class="token punctuation">,</span> resultB <span class="token punctuation">,</span> resultC <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
See more here:
- https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise
- https://www.digitalocean.com/community/tutorials/javascript-promises-for-dummies
6. Default parameter
Javascript defaults allow us to initialize a function’s input parameter if we call it without passing arguments or undefined.
For example if we don’t pass an argument to the sayGreeting
function, it will be undefined
1 2 3 4 | <span class="token keyword">function</span> <span class="token function-variable function">sayGreeting</span> <span class="token operator">=</span> <span class="token parameter">name</span> <span class="token operator">=></span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">'Hello '</span> <span class="token operator">+</span> name <span class="token punctuation">)</span> <span class="token function">sayGreeting</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token comment">// Hello undefined</span> |
With ES6 we can set the default value for the input parameter like this:
1 2 3 4 | <span class="token keyword">function</span> sayGreeting <span class="token operator">=</span> <span class="token punctuation">(</span> name <span class="token operator">=</span> <span class="token string">"Sunner"</span> <span class="token punctuation">)</span> <span class="token operator">=></span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token string">'Hello '</span> <span class="token operator">+</span> name <span class="token punctuation">)</span> <span class="token function">sayGreeting</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token comment">// Hello Sunner</span> |
7. Modules
When writing code, we usually have functions with a specific function / purpose, these related functions we separate … called a module. For example, we have a calculation module with addition and subtraction functions, for example:
1 2 3 4 5 6 7 8 9 | <span class="token comment">// calculation.js</span> <span class="token keyword">export</span> <span class="token keyword">function</span> <span class="token function">add</span> <span class="token punctuation">(</span> <span class="token parameter">a <span class="token punctuation">,</span> b</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> a <span class="token operator">+</span> b <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">export</span> <span class="token keyword">function</span> <span class="token function">sub</span> <span class="token punctuation">(</span> <span class="token parameter">a <span class="token punctuation">,</span> b</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> a <span class="token operator">-</span> b <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
We use the export
keyword to “show” to other files that we can import
for use, for example:
1 2 3 4 5 6 | <span class="token comment">// main.js</span> <span class="token keyword">import</span> <span class="token punctuation">{</span> add <span class="token punctuation">,</span> sub <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'./calculation.js'</span> <span class="token punctuation">;</span> <span class="token keyword">let</span> a <span class="token operator">=</span> <span class="token function">add</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 punctuation">;</span> <span class="token comment">// 3</span> <span class="token keyword">let</span> b <span class="token operator">=</span> <span class="token function">sub</span> <span class="token punctuation">(</span> <span class="token number">2</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 comment">// 1</span> |
8. Destructuring
Take a look at the bottom example:
1 2 3 4 5 6 7 8 9 10 | <span class="token keyword">let</span> user <span class="token operator">=</span> <span class="token punctuation">{</span> name <span class="token operator">:</span> <span class="token string">'Sunner'</span> <span class="token punctuation">,</span> age <span class="token operator">:</span> <span class="token number">19</span> <span class="token punctuation">,</span> address <span class="token operator">:</span> <span class="token string">'16 Ly Thuong Kiet St'</span> <span class="token punctuation">}</span> <span class="token keyword">let</span> name <span class="token operator">=</span> user <span class="token punctuation">.</span> name <span class="token keyword">let</span> age <span class="token operator">=</span> user <span class="token punctuation">.</span> age <span class="token keyword">let</span> address <span class="token operator">=</span> user <span class="token punctuation">.</span> address |
You can see that with the above user object and I want to create a variable to store each value in it, I have to rewrite the user.
it takes time.
With destructuring
we can do the following:
1 2 | <span class="token keyword">let</span> <span class="token punctuation">{</span> name <span class="token punctuation">,</span> age <span class="token punctuation">,</span> address <span class="token punctuation">}</span> <span class="token operator">=</span> user |
If we want to rename the variable name to username, we do the following:
1 2 3 4 | <span class="token keyword">let</span> <span class="token punctuation">{</span> name <span class="token operator">:</span> username <span class="token punctuation">,</span> age <span class="token punctuation">,</span> address <span class="token punctuation">}</span> <span class="token operator">=</span> user console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> username <span class="token punctuation">)</span> <span class="token comment">// Sunner</span> |
Simpler, right. Destructuring allows us to extract parts of an object or array.
9. Class
Before ES6, JS had no class, so we used to use functions like this.
1 2 3 4 5 6 7 8 9 10 11 | <span class="token keyword">function</span> <span class="token function">Person</span> <span class="token punctuation">(</span> <span class="token parameter">name</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> name <span class="token operator">=</span> name <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token class-name">Person</span> <span class="token punctuation">.</span> prototype <span class="token punctuation">.</span> <span class="token function-variable function">introduce</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> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">My name is </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> name <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">let</span> person <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Person</span> <span class="token punctuation">(</span> <span class="token string">'Dot'</span> <span class="token punctuation">)</span> person <span class="token punctuation">.</span> <span class="token function">introduce</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
With ES6, we can write clearer, easier to understand for those who already know languages like C #, Java …
1 2 3 4 5 6 7 8 9 10 11 12 13 | <span class="token keyword">class</span> <span class="token class-name">Person</span> <span class="token punctuation">{</span> <span class="token function">constructor</span> <span class="token punctuation">(</span> <span class="token parameter">name</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> name <span class="token operator">=</span> name <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token function">introduce</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token template-string"><span class="token template-punctuation string">`</span> <span class="token string">My name is </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">${</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> name <span class="token interpolation-punctuation punctuation">}</span></span> <span class="token template-punctuation string">`</span></span> <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">let</span> person <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Person</span> <span class="token punctuation">(</span> ‘Dot’ <span class="token punctuation">)</span> <span class="token punctuation">;</span> person <span class="token punctuation">.</span> <span class="token function">introduce</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
There are also more cool features of ES6 such as Proxy, Symbol … you can learn more here https://github.com/lukehoban/es6features
The above are not all features of ES6, but just some of the features that are good and useful to me. If you know a good feature, then comment for me to learn more with the nhea.
Thank you for your time reading.
This source: https://medium.com/javascript-in-plain-english/9-es6-features-every-javascript-developer-should-know-b1f2915e7add