es7重点笔记

时间:2022-11-05 15:11:46

1,函数绑定运算符,用来取代call,apply,bind调用,写法:并排的双冒号(::),左边是对象,右边是函数

foo :: bar;  // 等同于bar.bind(foo);

双冒号返回的还是原对象,所以可以用链式写法。

2,允许在函数定义或者调用时最后一个参数添加逗号

function fn(a,b,) {}

3,Object.values(obj):返回一个数组,成员是参数对象obj的自身(不含继承)可遍历的属性的键值,不是键名。

4,Object.entries(obj):返回一个数组,成员是参数对象obj的自身(不含继承)可遍历的属性的键值对数组,是一个一个小数组,键值对中间是逗号,数组里面套数组。

var obj = {foo: 'bar', baz: 42};
Object.entries(obj); // [ ['foo', 'bar'], ['baz', '42'] ]

  

5,对象的扩展运算符

es6规定了数组的扩展运算符(...)

const [a, ...b] = [1, 2, 3];

a;   // 1;

b;   // [2, 3]

  

es7将这个引入了对象:

let {x, y, ...z} = { x:1, y:2, z:3, a:4 };
x; // 1
y: // 2
z; // {z: 3, a: 4};

 

跟数组的解构赋值一样,必须是最后一个参数,这里有一个坑:

如果变量名和后面的键名不是对应的一模一样,那么就会返回undefined,除了最后的扩展运算符,前面的只有一样的才会返回对应的值,而最后的扩展运算符会把前面所有没有匹配到的属性全部放在一起作为最后一个对象。

let {a, y, b,...c} = { x:1, y:2, q: 5, z:3, a:4 };
a; // undefined;
y: // 2;
b: // undefined;
z; // {x: 1, q: 5, z: 3, a: 4};

  

6,Object.getOwnPropertyDescriptors()

返回指定对象所有自身属性(非继承)的描述对象,就是{ 属性名:{ Object.defineProperties第二个参数 } }

7,数组实例的includes(),

数组是否包含某个元素,有就返回true,没有就false,可以传NaN来检测NaN。es5的indexOf无法检测NaN

8,(待续)