1.箭头函数=>


([函数的形参,多个参数则以逗号分隔]) => [函数返回的值/表达式]


箭头函数则会捕获其所在上下文的 this 值,作为自己的 this 值。这样就 不需要利用闭包来保存this了。


2.let


自ES6,javascript开始拥有块级作用域,而 let 则是配合块级作用域,作为替代 var 的一个语法定义。


有了块级作用域,再也不用担心临时变量污染到外层的变量了:


3.const


const 是用来定义常量的,一旦定义了就不可修改(一修改就报错)。用途嘛,也比较单一,就是定义一下配置项什么的,免得被团队里的愣头青写的代码给瞎改了。


4.destructuring


解构, 按照一定模式,从数组和对象中提取值,对变量进行赋值


let [foo, [[bar], baz]] = [ 1 , [[ 2 ], 3 ]]; console .log(foo); // 1 console .log(bar); // 2 console .log(baz); // 3


5. 数组去重


Set是类似数组的一种结构,可以存储数据,与数组的区别主要是  Set中的元素不能重复,而数组中的元素可以重复


一句话总结: Set类型是一个包含无重复元素的有序列表。 使用Set的 has() 方法可以判断一个值是否在这个set中。 delete(要删除的值) :删除单个值


clear():清空所有的值


set()和Array.from()


var arr=[1,1,2,3,4,3,2];


var newArray=Array.from(new Set(arr))//[1,2,3,4]


6.ES6新增一个基本数据类型Symbol,用来创建私有成员。


Symbol 作为属性名,该属性不会出现在for…in、for…of循环中,也不会被Object.keys()、Object.getOwnPropertyNames()、JSON.stringify()返回。但是,它也不是私 有属性,有一个Object.getOwnPropertySymbols方法,可以获取指定对象的所有 Symbol 属性名。


7.  Map数据结构


ECMAScript 6 中的 map 类型包含一组有序的键值对,其中键和值可以是任何类型。


  1. Map创建也是使用Map构造函数
  2. 向Map存储键值对使用set(key, value);方法
  3. 可以使用get(key),来获取指定key对应的value

8 . 在ES6直接借鉴其他语言,引入了类的概念。


class PersonClass { 

 

  // 等效于 PersonType 构造函数。 

 

  constructor(name) { //这个表示类的构造函数。constuctor也是关键字必须小写。 

 

  this.name = name; //创建属性。 也叫当前类型的自有属性。 

 

  } 

 

  // 等效于 PersonType.prototype.sayName. 这里的sayName使用了我们前面的简写的方式。 

 

  sayName() { 

 

  console.log(this.name); 

 

  } 

 

  } 

 

  let person = new PersonClass("Nicholas"); 

 

  person.sayName(); // 输出 "Nicholas" 



  console.log(person instanceof PersonClass); // true 

 

  console.log(person instanceof Object); // true 


  console.log(typeof PersonClass); // "function" 

 

  console.log(typeof PersonClass.prototype.sayName); // "function"


类声明和函数定义不同,类的声明是不会被提升的。类声明的行为和 let 比较相似,所以当执行流作用到类声明之前类会存在于暂存性死区(temporal dead zone)内。


类声明中的代码自动运行在严格模式下,同时没有任何办法可以手动切换到非严格模式。


所有的方法都是不可枚举的(non-enumerable),这和自定义类型相比是个显著的差异,因为后者需要使用 Object.defineProperty() 才能定义不可枚举的方法。


所有的方法都不能使用 new 来调用,因为它们没有内部方法 [[Construct]]。


不使用 new 来调用类构造函数会抛出错误。也就是 必须使用new 类() 的方式使用


试图在类的方法内部重写类名的行为会抛出错误。(因为在类的内部,类名是作为一个常量存在的


9.ES6中的继承,使用类和extends


class Father{ 

 

  constructor(name){ 

 

  this.name = name; 

 

  } 

 

  sayName(){ 

 

  console.log(this.name); 

 

  } 

 

  } 

 

  class Son extends Father{ //extents后面跟表示要继承的类型 

 

  constructor(name, age){ 

 

  super(name); //相当于以前的:Father.call(this, name); 

 

  this.age = age; 

 

  } 

 

  //子类独有的方法 

 

  sayAge(){ 

 

  console.log(this.age); 

 

  } 

 

  } 


  var son1 = new Son("李四", 30); 

 

  son1.sayAge(); 

 

  son1.sayName(); 

 

  console.log(son1 instanceof Son); // true 

 

  console.log(son1 instanceof Father); //true


  1. 你只能在派生类中使用 super(),否则(没有使用 extends 的类或函数中使用)一个错误会被抛出。
  2. 你必须在构造函数的起始位置调用 super(),因为它会初始化 this。任何在 super() 之前访问 this 的行为都会造成错误。也即是说super()必须放在构造函数的首行。
  3. 在类构造函数中,唯一能避免调用 super() 的办法是返回一个对象。

如果在子类中声明与父类中的同名的方法,则会覆盖父类的方法。(这种情况在其他语言中称之为 方法的覆写、重写 )


如果在子类中又确实需要调用父类中被覆盖的方法,可以通过super.方法()来完成。