ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准。因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015。
【最常用的ES6特性】
let , const , class , extends , super , arrow function , template string , destructuring , default , rest arguments
【let , const】
这两个关键字的作用和var相似,都是用来声明变量的,但是略有不同
【问题】
var a="string"; while(true){ var a="world"; console.log(a); break; } console.log(a);
两次输出的结果都是 world ,这是因为ES5中只有全局作用域和函数作用域,没有局部作用域,在这里 while 中的a覆盖了外面的a的值。
【解决】
let
为JS新增了块级作用域,let声明的变量,只在 let 命令所在的代码块中有效。
const
的作用是声明常量。
【class , extends , super】
这三个特性涉及到对象,接近于传统语言的写法,引入了Class的概念。使得对对象的描述更接近于面向对象的编程方式,更容易理解。
class Animal{ constructor(){ this.type="animal"; } says(say){ console.log(this.type+" say "+say); } } let animal = new Animal(); animal.says("hello"); //animal say hello class Dog extends Animal{ constructor(){ super(); this.type = 'dog'; } } let dog = new Dog(); dog.says(" wang "); //dog say wang
这里用类class
定义了一个Animal类,constructor中使用this
定义了当前的实例对象。connstructor
中定义的属性和方法是自身的,外面定义的方法和属性是共有的。
Class之间能够通过extends
实现继承,相较于ES5中的修改原型链要更方便和好理解。上边定义的Dog
类,就继承了Animal类的所有属性和方法。
super
关键字,指代父类的实例(this对象)。子类必须在constructor
方法中调用super
方法,否则,新建子类实例会报错。这是因为子类没有自己的this
对象,而是继承父类的this
对象,然后进行加工。如果不调用super
方法,子类就得不到this
对象。