ES6或ECMAScript的2015年是6 ECMAScript的编程语言的版本日。 ECMAScript是Javascript的标准化版本,于2015年发布,随后更名为ECMAScript 2015。
ECMAScript和Javascript本质上是不同的。
ECMAScript与Javascript
- ECMAScript:这是ECMA-262中定义的用于创建通用脚本语言的规范,简单来说,它是用于创建脚本语言的标准化,由Ecma International引入,基本上是一种实现方法,我们可以通过该实现来学习如何创建脚本语言。
- Javascript:一种符合ECMAScript规范的通用脚本语言,基本上是一种告诉我们如何使用脚本语言的实现。
ES6
Javascript ES6已经存在了几年,它使我们能够以一种聪明的方式编写代码,这基本上使代码更现代,更易读。因此,“少写多做”这一术语绝对适合ES6。
ES6引入了一些关键功能,例如const,let,箭头功能,模板字面量,默认参数等等,下面我们逐一介绍一下它们。
在ES6之前,我们主要在需要声明变量时使用var关键字,但是它存在一些严重的问题,也不是开发人员所喜欢的,因此在ES6版本中,我们引入了const和let关键字,该关键字允许我们存储变量它们都有自己的存储变量的方式。
- const :const关键字主要用于存储其值将不会被更改的变量。以一个示例为例,您在创建一个Web应用程序时要存储一个其值将不会更改的变量,那么const肯定是存储该变量的最佳选择。在javascript中,const被认为比var更强大。曾经用于存储变量的变量不能被重新分配。简单来说,它是不可变的变量,除非与对象一起使用。
范例:
// Const const name = 'Mukul'; console.log(name); // Will print 'Mukul' to the console. // Trying to reassign a const variable name = 'Rahul'; console.log(name); // Will give TypeError.
输出:
在上面的代码中,我们用const关键字声明了一个变量名,然后console.log正常工作,但是用其他值重新赋值会产生错误。现在让我们来看一个使用const关键字声明对象的示例。
// Object using const const person ={ name:'Mukul Latiyan', age:'21', isPlaced:true }; console.log(person.name); // 'Mukul Latiyan' person.name = 'Mayank'; console.log(person.name); //'Mayank'
输出:
使用const关键字声明的对象的属性是可变的,就像在上面的代码中,我们声明的person对象具有一些属性,例如name,age,isPlaced 。当我们尝试访问属性时,一切都很好,当我们更改name属性时,它也能正常工作。因此,我们得出一个结论,即使用const关键字声明对象属性也是可变的。 - let :如果使用let关键字,则声明的变量将是可变的,即可以更改值。它的工作方式与var关键字相似,但有一些关键区别,例如作用域设置,与var相比,它是更好的选择。
// let let name = 'Mukul'; console.log(name); // Mukul name = 'Rahul'; console.log(name); // Rahul
输出:
对象也是可变的。喜欢:
// Object using let let bike = { name : 'Ninja ZX-10R', engine:'998cc', abs : 'dual channel' }; console.log(bike.engine); // 998cc bike.engine = '789cc'; console.log(bike.engine); // 789cc
输出:
箭头功能
箭头函数(也称为“胖箭头函数”)是一种用于编写函数表达式的更简洁的语法。在ES6中引入的箭头函数无疑是javascript中影响最大的更改之一。这些函数表达式使您的代码更易读,更现代。
// ES5
function printName(name){
console.log('Hello '+name);
}
printName('Mukul'); // Hello Mukul
输出:
而不是使用此,使用下面的代码:
// ES6
const printName = name =>{
return `Hi ${name}`; // using template literals
}
console.log(printName('Mukul')); // Hi Mukul
// We can also write the above code without
// the return statement
const printName1 = name => `Hi ${name}`;
console.log(printName1('Mukul')); // Hi Mukul
输出:
模板字面量
模板字面量是ES6的一项功能,与ES5及以下版本相比,它使我们能够以更好的方式使用字符串。通过简单地使用模板字面量,我们可以提高代码每当我们想连接字符串,也当我们想用一个字符串,它绝对不是一个推荐method.Template内部变量readability.Before ES6我们利用“+”运算符字面量使用反引号(“),而不是常规字符串使用的单引号或双引号。
// ES5
var name = 'Mukul Latiyan';
console.log('My name is '+ name);
// ES6
const name1 = 'Mukul Latiyan';
console.log(`My name is ${name1}`);
输出:
对象和数组的销毁
用javascript进行销毁基本上意味着将复杂的结构(对象或数组)分解为更简单的部分。通过销毁分配,我们可以将数组对象“解包”为一堆变量。
对象破坏
// ES5
const college = {
name : 'DTU',
established : '1941',
isPrivate : false
};
let name = college.name;
let established = college.established;
let isPrivate = college.isPrivate;
console.log(name); // DTU
console.log(established); // 1941
console.log(isPrivate); // false
输出:
使用ES6的新方法是:
// ES6
const college = {
name : 'DTU',
established : '1941',
isPrivate : false
};
let{name,established,isPrivate} = college;
console.log(name); // DTU
console.log(established); // 1941
console.log(isPrivate); // false
输出:
因此,与其将对象的每个属性分别声明为变量,不如将值放在大括号中以获取对象的任何属性。
阵列破坏
如果破坏数组,我们可以简单地将花括号替换为方括号。
喜欢:
// ES6
const arr = ['lionel','messi','barcelona'];
let[value1,value2,value3] = arr;
console.log(value1); // lionel
console.log(value2); // messi
console.log(value3); // barcelona
输出:
默认参数
默认参数允许您预先定义参数,这在某些情况下可能会有所帮助。在javascript中,函数参数默认为undefined,但是设置一个不同的默认值很有用。在ES6之前,我们用来定义默认参数的方法是通过在默认函数主体中测试参数value并为它们赋值(如果未定义)。
// ES5
function fun(a,b){
return a+b;
}
console.log(fun(2,1)); // 3
console.log(fun(2)); // 2 + undefined is NaN(not-a-number)
输出:
我们删除了此默认参数错误,如下所示:
// ES5(improved)
function fun(a,b){
b = (typeof b!=='undefined')?b:1;
return a + b;
}
console.log(fun(2,1)); // 3
console.log(fun(2)); // 3
输出:
在ES6之后,我们可以简单地编写:
// ES6
function fun(a,b=1){
return a + b;
}
console.log(fun(2,1)); // 3
console.log(fun(2)); // 3
输出:
班级
类是面向对象编程(OOP)的核心。 ES6引入了javascript中的类.javascript中的类可在构造函数的帮助下用于创建新的Objects,每个类中只能有一个构造函数。
// classes in ES6
class Vehicle{
constructor(name,engine){
this.name = name;
this.engine = engine;
}
}
const bike1 = new Vehicle('Ninja ZX-10R','998cc');
const bike2 = new Vehicle('Duke','390cc');
console.log(bike1.name); // Ninja ZX-10R
console.log(bike2.name); // Duke
输出:
剩余参数和价差运算符
- 其余的参数:其余参数语法允许我们代表的参数数目不定作为array.With休息的帮助参数的函数可以使用任意数量的参数,不管它是如何定义被调用。
// simple function function fun(a,b){ return a + b; } console.log(fun(1,2)); // 3 console.log(fun(1,2,3,4,5)); // 3
输出:
在上面的代码中,即使我们传递的参数比参数多,也不会引发任何错误,但是仅会评估前两个参数。与rest参数的情况不同。
// ES6 rest parameter function fun(...input){ let sum = 0; for(let i of input){ sum+=i; } return sum; } console.log(fun(1,2)); // 3 console.log(fun(1,2,3)); // 6 console.log(fun(1,2,3,4,5)); // 15
输出:
- Spread运算符:Spread运算符是ES6提供的另一种运算符,它使我们有特权从数组中获取参数列表。考虑一个示例,其中有一个数字列表,然后从该列表中返回最小数字。
console.log(Math.min(1,2,3,-1)); // -1
输出:
现在考虑我们有一个数组而不是一个列表,上面的Math对象方法将不起作用,并且将返回NaN,例如:
// Without spread let arr = [1,2,3,-1]; console.log(Math.min(arr)); // NaN
输出:
在函数调用中使用…arr时,它将“迭代”对象arr“扩展”到参数列表中。
为了避免这种NaN输出,我们可以使用散布运算符,如下所示:
// Spread operator let arr = [1,2,3,-1]; console.log(Math.min(...arr)); // -1
输出:
散布算子和休息运算符都使用三点(…),有时很难区分哪一个是休息或散布。只需记住:
- 当…在函数参数的末尾时,它是rest参数。
- 当…发生在函数调用或类似函数,其称为扩展运算符。