1、关于let

-- let变量必须先声明,后使用

-- 在同一作用域,let不能重复声明

-- let增加了块级作用域,从而从某种意义上取消了自我执行函数


2、关于const

-- const只声明一个常量,一旦声明,就不能改变(本质是引用地址不能改变)

-- const变量必须先声明,后使用


3、变量结构赋值

-- 解构赋值允许指定默认值,经常在函数传参时使用(只要模式匹配,部分参数可用省略)

-- 交换变量的值

-- 解构赋值对提取JSON对象中的数据,尤其有用

-- 遍历Map结构结合for……of……


4、关于Array.from

-- 方便将类似数组对象和可遍历的对象(iterable)(如documenet.getElementsByAagNames获得的对象)转换成数组


5、关于Array.of

-- 方便将一组值转换成数组,基本上可以用来替代Array()new Array()


6、关于数组实例的copyWithin

-- 数组实例的copyWithin方法,在当前数组内部,将指定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组。


7、关于find()和findIndex()

--find():数组实例的find方法,用于找出第一个符合条件的数组成员。

--findIndex():返回第一个符合条件的数组成员index位置


8、数组的fill(),entries(),keys(),values()

-- fill():fill方法使用给定值,填充一个数组。fill方法用于空数组的初始化非常方便.

-- entries()keys()values()——用于遍历数组。keys()是对键名的遍历、values()是对键值的遍历,entries()是对键值对的遍历。


9、数组的includes()

-- 返回一个布尔值,表示某个数组是否包含给定的值,取代之前的indexOf()方法,更加直观。

-- Map和Set数据结构有一个has方法,需要注意与includes区分。Map结构的has方法,是用来查找键名的,Set结构的has方法,是用来查找值的。


10、关于数组的空位

-- ES6则是明确将空位转为undefined。扩展运算符(...)也会将空位转为undefined


11、关于函数的扩展

-- 通常情况下,定义了默认值的参数,应该是函数的尾参数。如果非尾部的参数设置默认值,实际上这个参数是没法省略的。

-- 函数的length属性。函数的length属性,将返回没有指定默认值的参数个数。

-- 作用域。一旦设置了参数的默认值,函数进行声明初始化时,参数会形成一个单独的作用域(context)。

--可以将参数默认值设为undefined,表明这个参数是可以省略的。

-- rest参数. rest 参数(形式为“...变量名”),用于获取函数的多余参数,这样就不需要使用arguments对象了。

--扩展运算符。扩展运算符(spread)是三个点(...)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。由于扩展运算符可以展开数组,所以不再需要apply方法,将数组转为函数的参数了。

   *扩展运算符的运用

    (1)合并数组。[...arr1, ...arr2, ...arr3].

    (2)扩展运算符可以与解构赋值结合起来,用于生成数组。

    (3)如果将扩展运算符用于数组赋值,只能放在参数的最后一位,否则会报错。    

          a = list[0], rest = list.slice(1) // ES5          [a, ...rest] = list // ES6

   (4)扩展运算符还可以将字符串和Iterator接口的对象转为真正的数组

     [...'hello'] //["h", "e", "l", "l", "o"]

--  箭头函数

(1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。

(2)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。

(3)不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用Rest参数代替。

(4)不可以使用yield命令,因此箭头函数不能用作Generator函数。

(5)箭头函数可以绑定this对象,大大减少了显式绑定this对象的写法,双冒号

-- 尾调用优化(待学习)


12、关于对象的扩展

-- ES6 允许直接写入变量和函数,作为对象的属性和方法。这时,属性名为变量名。

-- ES6 可用表达式作为属性名。obj['a' + 'bc'] = 123; 等同于 obj[abc]=123;

-- Object.is()。Object.is就是部署这个算法的新方法。它用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致。不同之处只有两个:一是+0不等于-0,二是NaN等于自身。

-- Object.assign()。Object.assign方法用于对象的合并,将源对象(source)的所有可枚举属性,复制到目标对象(target)。如果具有相同属性,则会覆盖原属性。Object.assign方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。

-- 属性的可枚举性。(见文档)

-- 属性的遍历(见文档)

-- 对象的扩展运算符。扩展运算符(...)用于取出参数对象的所有可遍历属性,拷贝到当前对象之中。这等同于使用Object.assign方法。