let and const
Hoisting is JavaScript's default behavior of moving all declarations to the top of the current scope, which means following is valid
x=5
var x
y === 7 //false, as declaration is hoisted but not the initializations
var y = 7;
JavaScript only hoists declarations, not initializations.
var x
y === 7 //false, as declaration is hoisted but not the initializations
var y = 7;
JavaScript only hoists declarations, not initializations.
var is function scoped which sometimes is confusing. Refer following example
if(true){
var x = 20
}
console.log(x) //this will log 20
if(true){
var x = 20
}
console.log(x) //this will log 20
Even though x is declared inside if block, but since var declaration are hoisted it will be accessible anywhere within the function.
In ES6, let and const was introduced which is blocked scoped and is align with other programmable language like c#, java. In the above example, if you change var to let, it will throw error as you try to access x outside if block where its declared.
Arrow function
This is defined as anonymous function much like lambda function in c#
Destructuring Assignment
This make it possible to unpack values from array, or properties from objects, into distinct variables.
[a, b, ...rest] = [10, 20, 30, 40, 50];//a=10,b=20,rest=[30,40,50]
const o = {p: 42, q: true};
const {p: foo, q: bar} = o;
function someMethod({p: foo, q: bar})
This can be used even for nested object.
Spread syntax allows an iterable such as an array expression or string to be expanded in places where zero or more arguments (for function calls) or elements (for array literals) are expected, or an object expression to be expanded in places where zero or more key-value pairs (for object literals) are expected
var arr2 = [...arr]; // like arr.slice()
var concat = [...arr1, ...arr2];
var clonedObj = { ...obj1 };
var mergedObj = { ...obj1, ...obj2 };
[a, b, ...rest] = [10, 20, 30, 40, 50];//a=10,b=20,rest=[30,40,50]
const o = {p: 42, q: true};
const {p: foo, q: bar} = o;
function someMethod({p: foo, q: bar})
This can be used even for nested object.
Rest parameter give you access to remaining items in the from of array which makes it lot easier to run any of array method on that.
Spread syntax allows an iterable such as an array expression or string to be expanded in places where zero or more arguments (for function calls) or elements (for array literals) are expected, or an object expression to be expanded in places where zero or more key-value pairs (for object literals) are expected
var arr2 = [...arr]; // like arr.slice()
var concat = [...arr1, ...arr2];
var clonedObj = { ...obj1 };
var mergedObj = { ...obj1, ...obj2 };
Template literals
`Hello ${name} !!`
Can also be used with multi line
Can also be used with multi line
ES6 Module
ES6 provides build-in module in javascript, earlier to this you have to use library like commonjs, amd