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.

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

Quick Practical Guide for ES6
3 Likes25.95 GEEK