The list of new functionality is quite big, but here we’ll be focusing on some frequently used ones. We will also explore how to use best practices in our routine development tasks.
ES9 is in the discussion but ES6 is still not completely supported by all browsers. You can check the detailed compatibility table here for reference. ECMAScript(ES) is the standard, while JavaScript is the most popular language that is used to implement this standard and builds on top of it.
ES6 introduces some welcome changes to solve common pain points with JavaScript scoping.
Let’s take an example (ES5)
function myFunction() { var myValue = "I am value"; if (1) { let myValue = "I am another value"; console.log(myValue) } console.log(myValue) }
Output:
I am another value
I am another value
However, I do not want my outer console.log statement (as in above example) to print the value of the inner variable. This is generally not the desired behaviour.
If we talk about scopes in ES5, there are two scopes in ES5: global and function.
Scope: It’s just a boundary, inside which the variable lives or can be used.
For example:
function myFunction(){ var myValue = "Don't touch, I'm a value" } console.log(myValue)
Output:
ReferenceError: myValue is not defined.
And this is because we’re trying to access the value of variable myValue out of its scope.
Though in ES5 you could achieve it by using IIFE that isn’t such easy.
So, in ES6 a keyword LET is introduced which has a local scope (yes there is another in the next section).
Let is not a replacement of var, but it is said to be a good programming standard in ES6 and typescript because it makes variables scopes predictable and easier to reason about.
Typescript: ES6 standard standard language, extension is, .ts
Let’s see how it resolves the earlier issue(s) (ES6).
function myFunction() { var myValue = "I am value"; if (1) { let myValue = "I am another value"; console.log(myValue) } console.log(myValue) }
Output:
I am another value
I am value
You should feel accomplished!! Now try a loop using let for yourself.
Another exciting addition is const, const provides the mechanism of immutability which means, the variables do not change over time.
For example:
const myConst = "my const value"; myConst = "my another const value";Output:
VM47:1 Uncaught SyntaxError: Identifier ‘myConst’ has already been declared
at <anonymous>:1:1
Before any argument, I would add that, the variable is immutable but not the value it is assigned to. It means if we declare an object as const, we can change the properties of that object.
For Example:
const myConstObject = {};
myConstObject.constProp = “Const Value”;
console.log(myConstObject)Output:
{constProp: “Const Value”}
If you are frequently using for…in & foreach loops you may be skeptical of the introduction of for…of but believe me, you’re going to like it!.
So, why for…of arrived, definitely for…of got something better than for…in, let’s check it.
For…in (ES5):
var myCoins = [1,2,5,10];
for( let coin in myCoins){
console.log(typeof(coin));
}Output:
string
string
string
string
Yes, you read the output right. for…in loop returns a number array as string values. This can obviously confuse and create hard-to-track bugs.
For & ForEach (ES5):
Let’s see a basic example to show how forEach works:
var myCoins = [1,2,5,10,20]
myCoins.forEach(function(value){
console.log(value);
});Output:
1,2,5,10,20
Yes, that’s right, there is no number to string conversion issues. But there is a problem.
You cannot break out of the loop using break statement and move to the next iteration with continue statement.
For…of:
Introduced in ES6, for…of avoids the issues of the for…in loop, and it works with break and continue statements and even allows return from the enclosing block.
var myCoins = [1,2,5,10];
for( let coin of myCoins){
console.log(typeof(coin));
}Output:
number
number
number
number
Let’s start with some frequently used ones, like Set and Map.
Set: Let’s quickly cover some of the important bullet points about set.
let myCoinSet = new Set();
myCoinSet.add(‘foo’);
myCointSet.size
// 1myCoinSet.add(‘foo’);
myCoinSet.size
//1
let myCoinSet = new Set([1, 2, 3]) - correct
let myCoinSet = new Set(1,2,3) -wrong
Or you can do like:
Let myCoinSet = new Set();
myCoinset.add(1) -correct
myCoinSet.add(1,2,4) -wrong
myCoinSet.add([1,4,5]) -wrong
console.log(myCoinSet[1]) -wrong
let myCoinSet = new Set([1, 2, 5, 10])
for (let coin in myCoinSet){
console.log(coin)
}Output:
1, 2, 5, 10
Map: Let’s quickly cover some of the important bullet points about the map.
Let’s do some fundamental operations using Map.
let myMap = new Map();
Adding pairs
let myMap = new Map();
myMap.set(“Name”, “Carlos”)
myMap.set(“Occupation”, “Engineer” )
Another way of adding:
let myMap = new Map([
[ “Name”, “Alex” ],
[ “Occupation”, “Test Engineer” ],
[ “Company”, “Modus Create” ]
]);
Get element by key
map.get(“Name”)
// Carlos
map.has(“Name”)
//true
map.delete(“Name”)
map.size()
map.clear()
let m = new Map([
[“Name”, “Chris”],
[“Occupation”, “Technical Manager”],
[“Company”, “Modus Create”],
[“Country”, “USA”]
]);1- for(let keys of m.keys()){
console.log(keys)
}
2- for(let value of m.values()){
console.log(values)
}
3- for(let [value, key] of m){
console.log(value: ${value} Key: ${key}
)
}
value: Name Key: Chris
value: Occupation Key: Technical Manager
value: Company Key: Modus Create
value: Country Key: USA
Let’s discuss How Objects are different from Map
var person = {
name: “Carlos”,
workingDays() {
console.log(“25 days average”)
}
}
There are many more cool and advanced features in ES6 such as Fat arrow function, Destructuring, Modules, Classes, Interfaces, Promises and Types. This is not the end of this topic. Look for the part 2 of this subject in an upcoming post.
Originally published by Nikhil Kumar at moduscreate.com
===========================================
Thanks for reading :heart: If you liked this post, share it with all of your programming buddies! Follow me on Facebook | Twitter
☞ How to enable ES6 (and beyond) syntax with Node and Express
☞ Getting Started with ES6 Arrow Functions in JavaScript
☞ JavaScript Try Catch & ⚠ Error Handling ES6 Tutorial (2019)
☞ Understanding Generators in ES6 Javascript
#javascript #es6 #web-development