Quick Practical Guide for ES6

   Angular
Quick practical guide for ES6 Featured Image

In this post we are going to examine what new features arrived in ES6 and how to use them. Assess quick examples to understand the improvements on ES5. 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.

Scoping

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"}

Looping

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

Data Structures

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.

  • You do not store key-value pair like objects in Set, just the keys.
  • No repeating values, contains distinct elements/objects.
    • Example:
    • let myCoinSet = new Set();
      myCoinSet.add('foo');
      myCointSet.size
      // 1
      
      myCoinSet.add('foo');
      myCoinSet.size
      //1
      
  • Set receives iterable parameter as its input.
    • Example:
    • 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
      
  • Set does not support random order access of elements like arrays do
    • For Example:
    • console.log(myCoinSet[1]) -wrong
      
  • Some common operations of Set:
    • Remove element: myCoinSet.delete(2).
    • Empty the set: myCoinSet.clear();
  • Looping over Set is quite straightforward
  • For Example:
  • 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.

  • A map is a key-value pair.
  • An order is maintained as they are saved so when we put loop, it prints in the same order.

Let’s do some fundamental operations using Map.

  • Creating 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
    
  • Checking whether key exists
  • map.has(“Name”)
    //true
    
  • Deleting by key
  • map.delete(“Name”)
    
  • Checking size
  • map.size()
    
  • Empty whole map
  • map.clear()
    
  • Looping over map is quite easy like we did for set, but here we have key-value so, it depends what you want to loop through.
    • Example:
    • let m = new Map([
       ["Name", "Chris"],
       ["Occupation", "Technical Manager"],
       ["Company", "Modus Create"],
       ["Country", "USA"]
      ]);
      
      1-	for(let keys of m.keys()){
      	console.log(keys)
      	}
      
      • Output:
      • Name, Occupation, Company, Country

        2-	for(let value of m.values()){
        	console.log(values)
        	}
        
      • Output:
      • Chris, Technical Manager, Modus Create, USA

        3-	 for(let [value, key] of m){
        		  console.log(`value: ${value} Key: ${key}`)
                }
        
      • Output:
      • 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

  • In Objects you are bound to use simple keys as string, numbers or symbols but in Map you can use even array and objects.
  • Map is an instance of Object not vice-versa.
  • Functions as values is not possible in Map but in object it’s possible.
    • Example:
    • var person = {
       name: "Carlos",
       workingDays() {
         console.log("25 days average")
       }
      }
      
  • Using objects is preferred over map if your application has bountiful JSON operations.
  • What is your experience using Objects and Maps? Please share your scenarios where you find one of them is more efficient over another. What problem could you not solve by one but not with the other?

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.

Please leave your valuable comments & suggestions about this post.


This website uses cookies

These cookies are used to collect information about how you interact with our website and allow us to remember you. We use this information in order to improve and customize your browsing experience, and for analytics and metrics about our visitors both on this website and other media. To find out more about the cookies we use, see our Privacy Policy.

Please consent to the use of cookies before continuing to browse our site.

Like What You See?

Got any questions?


>