Introduce
Every year, Javascript updates add new features. ES2021 (also known as ES12) is expected to be released in June this year. New features added each year go through a four-stage process. All the features listed below, at the time of writing, have reached their final stage and are ready for release.
String.prototype.replaceAll
In Javascript, the replace()
only replaces the first occurrence of a pattern in a string. If we want to replace all matches of a pattern in a string, the only way to achieve that is to provide the template as a regular expression
1 2 3 4 5 6 7 8 9 | <span class="token keyword">const</span> str <span class="token operator">=</span> <span class="token string">"macOS is way better than windows. I love macOS."</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> newStr <span class="token operator">=</span> str <span class="token punctuation">.</span> <span class="token function">replace</span> <span class="token punctuation">(</span> <span class="token string">"macOS"</span> <span class="token punctuation">,</span> <span class="token string">"Linux"</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> newStr <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Linux is way better than windows. I love macOS.</span> <span class="token keyword">const</span> newStr2 <span class="token operator">=</span> str <span class="token punctuation">.</span> <span class="token function">replace</span> <span class="token punctuation">(</span> <span class="token regex">/macOS/g</span> <span class="token punctuation">,</span> <span class="token string">"Linux"</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> newStr2 <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Linux is way better than windows. I love Linux.</span> |
The replaceAll()
suggestion method returns a new string with all matches of a pattern replaced with a replacement string.
1 2 3 4 5 | <span class="token keyword">const</span> str <span class="token operator">=</span> <span class="token string">"macOS is way better than windows. I love macOS."</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> newStr <span class="token operator">=</span> str <span class="token punctuation">.</span> <span class="token function">replaceAll</span> <span class="token punctuation">(</span> <span class="token string">"macOS"</span> <span class="token punctuation">,</span> <span class="token string">"Linux"</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> newStr <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Linux is way better than windows. I love Linux.</span> |
Logical Assignment Operator
With the newly proposed logical assignment operators &&=
, ||=
, ??=
– we can assign a value to a variable based on a logical operation. It combines logical math with assignment expression.
Logical assignment AND ( &&=
)
The logical AND
assignment operator performs the assignment only when the left truthy
is truthy
. Conversely, if the left falsy
is falsy
( false
, 0
, -0
, 0n
, “”
, null
, undefined
and NaN
), the assignment is not performed.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <span class="token keyword">let</span> x <span class="token operator">=</span> <span class="token number">10</span> <span class="token punctuation">;</span> <span class="token keyword">let</span> y <span class="token operator">=</span> <span class="token number">15</span> <span class="token punctuation">;</span> x <span class="token operator">&&</span> <span class="token operator">=</span> y <span class="token punctuation">;</span> <span class="token comment">// Equivalent: x && (x = y)</span> console <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 punctuation">;</span> <span class="token comment">// 15</span> x <span class="token operator">=</span> <span class="token number">0</span> <span class="token punctuation">;</span> x <span class="token operator">&&</span> <span class="token operator">=</span> y <span class="token punctuation">;</span> console <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 punctuation">;</span> <span class="token comment">// 0</span> |
It can be understood simply as if(x) { x = y; }
The logical assignment OR ( ||=
)
The logical OR
assignment operator performs assignment only when the left falsy
is falsy
( false
, 0
, -0
, 0n
, “”
, null
, undefined
and NaN
). Otherwise, if the left truthy
is truthy
, the assignment will not be performed.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <span class="token keyword">let</span> x <span class="token operator">=</span> <span class="token keyword">null</span> <span class="token punctuation">;</span> <span class="token keyword">let</span> y <span class="token operator">=</span> <span class="token number">15</span> <span class="token punctuation">;</span> x <span class="token operator">||</span> <span class="token operator">=</span> y <span class="token punctuation">;</span> <span class="token comment">// Equivalent: x || (x = y)</span> console <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 punctuation">;</span> <span class="token comment">// 15</span> x <span class="token operator">=</span> <span class="token number">10</span> <span class="token punctuation">;</span> x <span class="token operator">||</span> <span class="token operator">=</span> y <span class="token punctuation">;</span> console <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 punctuation">;</span> <span class="token comment">// 10</span> |
Same as if(!x) { x = y; }
Nullish ( ??=
) logic assignment
The Logic Nullish assignment operator only performs assignment when the left operand is empty ( undefined
or null
). Otherwise will not.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <span class="token keyword">let</span> x <span class="token operator">=</span> <span class="token keyword">null</span> <span class="token punctuation">;</span> <span class="token keyword">let</span> y <span class="token operator">=</span> <span class="token number">15</span> <span class="token punctuation">;</span> x <span class="token operator">??</span> <span class="token operator">=</span> y <span class="token punctuation">;</span> <span class="token comment">// Equivalent: x ?? (x = y)</span> console <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 punctuation">;</span> <span class="token comment">// 15</span> x <span class="token operator">=</span> <span class="token number">10</span> <span class="token punctuation">;</span> x <span class="token operator">??</span> <span class="token operator">=</span> y <span class="token punctuation">;</span> console <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 punctuation">;</span> <span class="token comment">// 10</span> |
It can be understood like this if(x == null || x == undefined) { x = y; }.
Numeric Separators
Large numeric characters are difficult to parse quickly by the human eye. For example, consider the number 1019436871.42. We must pay close attention to see it, and confusion is inevitable.
To improve readability, this new addition to the Javascript language allows underscores as separators in numeric characters. We could rewrite the same number as 1_019_436_871.42. And it works for all types of digits:
1 2 3 4 5 6 7 8 9 10 11 12 13 | <span class="token comment">// A decimal integer literal with its digits grouped per thousand:</span> <span class="token number">1_000_000_000_000</span> <span class="token comment">// A decimal literal with its digits grouped per thousand:</span> <span class="token number">1_000_000.220_720</span> <span class="token comment">// A binary integer literal with its bits grouped per octet:</span> <span class="token number">0b01010110_00111000</span> <span class="token comment">// A binary integer literal with its bits grouped per nibble:</span> <span class="token number">0b0101_0110_0011_1000</span> <span class="token comment">// A hexadecimal integer literal with its digits grouped by byte:</span> <span class="token number">0x40_76_38_6A_73</span> <span class="token comment">// A BigInt literal with its digits grouped per thousand:</span> <span class="token number">4_642_473_943_484_686_707n</span> |
Note: it does not affect results, only improves readability.
Intl.ListFormat
An Intl.ListFormat object allows for the formatting of a language-sensitive
. The ListFormat object takes two parameters, both of which are optional. The first parameter is language (locale)
and the second is an options
object with two properties – style
and type
Intl.ListFormat has a method called format()
, which takes an array as an argument and formats it in different ways depending on the language.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <span class="token keyword">const</span> list <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token string">'Motorcycle'</span> <span class="token punctuation">,</span> <span class="token string">'Bus'</span> <span class="token punctuation">,</span> <span class="token string">'Car'</span> <span class="token punctuation">]</span> <span class="token punctuation">;</span> <span class="token comment">// English</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token keyword">new</span> <span class="token class-name">Intl <span class="token punctuation">.</span> ListFormat</span> <span class="token punctuation">(</span> <span class="token string">'en'</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> style <span class="token operator">:</span> <span class="token string">'long'</span> <span class="token punctuation">,</span> type <span class="token operator">:</span> <span class="token string">'conjunction'</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">format</span> <span class="token punctuation">(</span> list <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Motorcycle, Bus and Car</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token keyword">new</span> <span class="token class-name">Intl <span class="token punctuation">.</span> ListFormat</span> <span class="token punctuation">(</span> <span class="token string">'en'</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> style <span class="token operator">:</span> <span class="token string">'short'</span> <span class="token punctuation">,</span> type <span class="token operator">:</span> <span class="token string">'disjunction'</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">format</span> <span class="token punctuation">(</span> list <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Motorcycle, Bus or Car</span> <span class="token comment">// Dutch</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token keyword">new</span> <span class="token class-name">Intl <span class="token punctuation">.</span> ListFormat</span> <span class="token punctuation">(</span> <span class="token string">'nl'</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> style <span class="token operator">:</span> <span class="token string">'long'</span> <span class="token punctuation">,</span> type <span class="token operator">:</span> <span class="token string">'conjunction'</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">format</span> <span class="token punctuation">(</span> list <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Motorcycle, Bus en Car</span> <span class="token comment">// German</span> console <span class="token punctuation">.</span> <span class="token function">log</span> <span class="token punctuation">(</span> <span class="token keyword">new</span> <span class="token class-name">Intl <span class="token punctuation">.</span> ListFormat</span> <span class="token punctuation">(</span> <span class="token string">'de'</span> <span class="token punctuation">,</span> <span class="token punctuation">{</span> style <span class="token operator">:</span> <span class="token string">'long'</span> <span class="token punctuation">,</span> type <span class="token operator">:</span> <span class="token string">'conjunction'</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">format</span> <span class="token punctuation">(</span> list <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// Motorcycle, Bus und Car</span> |
Promise.any
ES2021 will introduce the Promise.any()
method as short-circuits
and return a value, right after the first Promise
resolved
from the list / array of Promise
. If all Promise
are rejected
, it will throw an AggregateError
, an individual SubClass grouped together.
Unlike the Promise.race()
method that focuses on the Promise
rejected
on the first thing, the Promise.any()
focuses on the Promise
resolved
first.
1 2 3 4 5 6 7 8 9 | <span class="token keyword">const</span> promise1 <span class="token operator">=</span> Promise <span class="token punctuation">.</span> <span class="token function">reject</span> <span class="token punctuation">(</span> <span class="token number">0</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> promise2 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Promise</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> <span class="token parameter">resolve</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token function">setTimeout</span> <span class="token punctuation">(</span> resolve <span class="token punctuation">,</span> <span class="token number">100</span> <span class="token punctuation">,</span> <span class="token string">'quick'</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> promise3 <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Promise</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> <span class="token parameter">resolve</span> <span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token function">setTimeout</span> <span class="token punctuation">(</span> resolve <span class="token punctuation">,</span> <span class="token number">500</span> <span class="token punctuation">,</span> <span class="token string">'slow'</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> promises <span class="token operator">=</span> <span class="token punctuation">[</span> promise1 <span class="token punctuation">,</span> promise2 <span class="token punctuation">,</span> promise3 <span class="token punctuation">]</span> <span class="token punctuation">;</span> Promise <span class="token punctuation">.</span> <span class="token function">any</span> <span class="token punctuation">(</span> promises <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">then</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> <span class="token parameter">value</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> value <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// quick</span> |
1 2 3 4 5 6 7 8 9 | <span class="token keyword">const</span> promise1 <span class="token operator">=</span> Promise <span class="token punctuation">.</span> <span class="token function">reject</span> <span class="token punctuation">(</span> <span class="token number">0</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> promise2 <span class="token operator">=</span> Promise <span class="token punctuation">.</span> <span class="token function">reject</span> <span class="token punctuation">(</span> <span class="token number">0</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> promise3 <span class="token operator">=</span> Promise <span class="token punctuation">.</span> <span class="token function">reject</span> <span class="token punctuation">(</span> <span class="token number">0</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">const</span> promises <span class="token operator">=</span> <span class="token punctuation">[</span> promise1 <span class="token punctuation">,</span> promise2 <span class="token punctuation">,</span> promise3 <span class="token punctuation">]</span> <span class="token punctuation">;</span> Promise <span class="token punctuation">.</span> <span class="token function">any</span> <span class="token punctuation">(</span> promises <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">then</span> <span class="token punctuation">(</span> <span class="token punctuation">(</span> <span class="token parameter">value</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> value <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// AggregateError: All promises were rejected</span> |
summary
As a developer, it is important to stay up to date with new features of a language. I hope that I was able to introduce you to some new Javascript features with ES2021. Thank you for reading
Source: here