常用 ES6 语法

解构赋值相对于额外写了赋值语句,对象解构赋值可以理解为导出(反过来不全),可以有默认值。函数的形参也可以使用对象在函数体内实现解构,对象属性名可以计算(let key = "z";let o = { [key]: foo })。for of 迭代解构,该加 let 还是要加

Enhanced Object Literals (增强的对象文本):o = {a:1,b(){}} // 直接表示对象: a =1 , o = {a}
// ({a, b} = {a:1, b:2});

let,const 定义的变量在初始化前不能使用,前面的区域叫做 TDZ(temporal dead zone),区别 var
// let, const 声明时会初始化成 undefined
// let, const 顶级定义的变量不会创建成全局对象的属性,而是全局范围下的变量

const 指不会重新赋值的量(值还是可以修改)

参数相当于使用了 let 定义,function foo(x= y, y) {console.log(x)} foo() // 错误,默认参数 y 在 TDZ 中

默认参数在它们被实际使用的时候才会被执行(避免重复执行默认参数中的函数),默认参数处于外层作用域和函数体作用域之间,是一个特殊的作用域:
// 实参只要为 undefined 就会使用默认参数
// 会默认声明到函数体内, function foo(y = 1){console.log(y);var y = 1}; foo(10) // => 10
// 默认参数是函数的话Firefox也会在函数体内执行(跟上一条规则类似),let y = 1;function foo(x = function () {console.log(y)}, y = 2) {x();var y = 3;console.log(y);x();}foo(); // 233 , 而Chrome会在默认参数环境中执行// 232

有类声明和类表达式两种形式,类声明和函数声明不同的一点是,函数声明存在变量提升现象,而类声明不会(相当于 let)。
let const(声明时必须赋值) 不能重复声明(后面var也不行)
// for…in,for…of, if 等语句中用 var 是定义在外面, let 是定义在后面的语句块中。
在类中直接写构造函数 constructor(),可以传参数初始化对象

class只是 JavaScript 现有的、基于原型的继承模型的一种语法包装(语法糖),它能让我们用更简洁明了的语法实现继承。
// class 将 以前的构造函数和 、原型对象写在一起了,静态函数是构造函数的方法
constructor外面包括可继承的原型方法/字段和类静态方法/字段
构造函数中的 this 就是实例对象
super 关键字调用父对象(继承对象,即构造函数的prototype属性)的构造器和函数:
super([arguments]); // 访问父对象上的构造函数
super.functionOnParent([arguments]); // 访问父对象上的方法
// 注意: 在派生类中,super() 必须在你使用 this 之前调用,
// 否则会导致引用错误。
// super 只能用在速记方法定义中
super 属性和 super[expr] 表达式在任何对象字面量方法定义上都可以使用。
extends 关键字可以用来创建继承于某个类的子类。class childClass extends superClass{}
静态方法(static fnm())经常作为程序的工具函数使用。

箭头函数就是个是简写形式的函数表达式,并且它拥有词法作用域的this值(不能被bind This).箭头函数总是匿名的. // 箭头函数中没有 arguments, 用剩余参数代替
1 个参数的时候小括号可以省略。表达式只有一条不需要大括号此时该表达式的值就是此函数的返回值.不带参数的函数需要括号。直接返回对象表达式时可以用圆括号括起来(因为{}也是函数体/语句块的标识符)。

在過去,函數的 this 變數在不同狀況下一直指向不同值 (例如當建構子呼叫時指向的是新建構的物件、undefined 在 strict 模式、當以物件方法呼叫時只向呼叫物件),這樣的特性對物件導向程式設計來說其實相當麻煩。箭頭函數會自動將 this 變數綁定到其定義時所在的物件
由於 this 變數已被綁定,所以透過 callapply 呼叫箭頭函數只能傳入參數但無法改變 this
  1. 函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
  2. 不可以当作构造函数,也就是说,不可以使用 new 命令,否则会抛出一个错误。
  3. 不可以使用 arguments 对象,该对象在函数体内不存在。如果要用,可以用 Rest 参数代替。
  4. 不可以使用 yield 命令,因此箭头函数不能用作 Generator 函数。

… 展开操作符可以将有长度的空数组转为 undefined 数组,[...Array(5)]。