ES6杂碎

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接口:数组某些类似数组的对象(例如:字符串)SetMap结构。

  默认调用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

 

posted on 2018-08-30 19:15  我爱吃豌豆  阅读(116)  评论(0编辑  收藏  举报

导航