es6

 

默认值赋值注意点:

1.只有当一个数组成员严格等于undefined,默认值才会生效。

    let [x = 1] = [undefined];
    x // 1
    
    let [x = 1] = [null];
    x // null

2.默认值可以引用解构赋值的其他变量,但该变量必须已经声明。

let [x = 1, y = x] = [];     // x=1; y=1
    let [x = 1, y = x] = [2];    // x=2; y=2
    let [x = 1, y = x] = [1, 2]; // x=1; y=2
    let [x = y, y = 1] = [];     // ReferenceError: y is not defined

变量的解构注意点

1.由于数组本质是特殊的对象,因此可以对数组进行对象属性的解构。

 let arr = [1, 2, 3];
    let {0 : first, [arr.length - 1] : last} = arr;
    first // 1
    last // 3

2.解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象。由于undefined和null无法转为对象,所以对它们进行解构赋值,都会报错。

 let { prop: x } = undefined; // TypeError
 let { prop: y } = null; // TypeError

3.为了区分模式,还是表达式 --> 只要有可能导致解构的歧义,就不得使用圆括号。

 //变量申明
    let [(a)] = [1];
    let {x: (c)} = {};
    
    // 函数参数
    function f([(z)]) { return z; }
    function f([z,(x)]) { return x; }
    
    //赋值语句的模式部分
    ({ p: a }) = { p: 42 };
    ([a]) = [5];
    
    //可以使用(赋值语句的非模式部分)
    [(b)] = [3]; // 正确
    ({ p: (d) } = {}); // 正确
    [(parseInt.prop)] = [3]; // 正确

字符串拓展

详见http://es6.ruanyifeng.com/#docs/string

 

正则拓展

详见 http://es6.ruanyifeng.com/#docs/regex

数值的拓展

二进制和八进制表示法(前缀0b | 0o)
Number.isFinite(), Number.isNaN()
Number.parseInt(), Number.parseFloat()
Number.isInteger()
Number.EPSILON(最小精度) 2 ** -52
安全整数和 Number.isSafeInteger(): 判断是否在安全值范围
Math 对象的扩展
指数运算符**

函数的扩展

  1. 函数参数的默认值

  2. rest 参数 …props

  3. 严格模式

  4. name 属性

  5. 箭头函数 =>this引用的外层函数

 

Set 和 Map 数据结构

  1. Set: 它类似于数组,但是成员的值都是唯一的,没有重复的值。
  2.    const set = new Set([1, 2, 3, 4, 4, 4, 4]);
       [...set]
       // [1, 2, 3, 4]
       
       // 去除数组的重复成员
       [...new Set(array)]
       
       //在 Set 内部,两个NaN是相等。
       //另外,两个对象总是不相等的。
    - add(value):添加某个值,返回 Set 结构本身。
    - delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
    - has(value):返回一个布尔值,表示该值是否为Set的成员。
    - clear():清除所有成员,没有返回值。

    Map 的键实际上是跟内存地址绑定的,只要内存地址不一样,就视为两个键。这就解决了同名属性碰撞(clash)的问题,我们扩展别人的库的时候,如果使用对象作为键名,就不用担心自己的属性与原作者的属性同名。

    const map = new Map();
    const k1 = ['a'];
    const k2 = ['a'];
    
    map
    .set(k1, 111)
    .set(k2, 222);
    
    map.get(k1) // 111
    map.get(k2) // 222

 

posted @ 2019-03-18 09:02  xiayq  阅读(167)  评论(0编辑  收藏  举报