1、let声明的变量没有变量提升;
2、const声明的变量:块级作用域内有效,存在暂时性死区,变量指向的那个内存地址不得改动;
3、...tail解构出来的是数组或空数组
let [head, ...tail] = [1, 2, 3, 4]; head //1 tail //[2, 3, 4]
4、Iterator(遍历器)是一种接口,作用:一是为各种数据结构,提供一个统一的、简便的访问接口,二是使得数据结构的成员能够按某种次序排列,三是ES6创造了一种新的遍历命令for...of
循环,Iterator接口主要供for...of
消费。
在ES6中,有三类数据结构原生具备Iterator接口:数组、某些类似数组的对象(例如:字符串)、Set和Map结构。
默认调用Iterator接口的情况:
*解构赋值
*扩展运算符(...)
*任何接受数组作为参数的场合
只要某种数据结构具有Iterator接口,都可以采用数组形式的解构赋值
5、解构赋值,默认值生效的条件是,对象的属性值严格等于undefined
var {x = 3} = {x: undefined}; x //3 默认值生效var {x = 3} = {x: null}; x //null 默认值不生效
6、u修饰符
用来正确处理大于\uFFFF的Unicode字符(中文字)。
var s = '级';/^\uD83D/u.test('\uD83D\uDC2A') //false /^\uD83D/.test('\uD83D\uDC2A') //true \uD83D\uDC2A是一个4字节的UTF-16编码,代表一个字符。但是,ES5不支持4字节的UTF-16编码,会将其识别为2个字符,导致第二行代码结果为true。
加上了修饰符以后,ES6就会识别其为一个字符,所以第一行代码结果为false.
7、如果函数foo调用时参数不是对象,变量x和y就不会生成,从而报错。
function foo ({x, y = 5}) {console.log(x, y) }foo({}) //undefined, 5 foo({x: 1}) //1, 5 foo({x: 1,y: 2}) //1, 2 foo() //TypeError: Cannot read property 'x' of undefined