ES7 新特性

1. Array.prototype.includes()

接收两个参数:要搜索的值和搜索的开始索引。

[1, +0, 3, 4].includes(-0); // true(+0 与 -0 被认为是相同的)
[1, +0, 3, 4].indexOf(-0);  // 1

只能判断简单类型,对于复杂类型(对象、二维数组等)无法判断:

const arr = [1, [2, 3], 4];
arr.includes([2, 3]); // false
arr.indexOf([2, 3]);  // -1

与 indexOf 不同:includes 使用 SameValueZero 比较,能识别 NaN。

const demo = [1, NaN, 2, 3];
demo.indexOf(NaN);   // -1
demo.includes(NaN);  // true

2. 指数运算符 **

2 ** 10;     // 1024
Math.pow(2, 10); // 1024

3. Object.entries()

将对象中可枚举属性的键名和键值按二维数组方式返回。若对象是数组,会把下标作为键值返回。

Object.entries({ one: 1, two: 2 }); // [['one', 1], ['two', 2]]
Object.entries([1, 2]);             // [['0', 1], ['1', 2]]

entries() 返回的顺序和 for...in 循环一致:如果对象的 key 是数字,会按数字排序返回。

4. String.prototype.padStart() / padEnd()

参数:目标长度、填充字段。

'Vue'.padStart(10);        // '       Vue'
'React'.padStart(10);      // '     React'
'JavaScript'.padStart(10); // 'JavaScript'

只有当字符串长度小于目标长度时才填充;目标长度小于字符串本身长度时不会截断,原样输出。

5. Object.values()

返回对象自身可枚举属性的值数组(与 Object.keys() 配套)。

Object.values({ one: 1, two: 2 }); // [1, 2]

6. Object.getOwnPropertyDescriptors()

返回目标对象所有自身属性的属性描述符(不包括原型链继承的)。

const obj = {
  id: 1,
  name: 'Tom',
  get gender() { console.log('gender'); },
  set grade(d) { console.log(d); }
};
console.log(Object.getOwnPropertyDescriptors(obj));

与 Object.getOwnPropertyDescriptor(obj, key) 的区别:

  • getOwnPropertyDescriptor:只返回指定 key 的描述对象。
  • getOwnPropertyDescriptors:返回所有自身属性的描述对象。

补充:

  • Object.getOwnPropertyDescriptors() 常用于正确地拷贝 get / set 访问器属性(如 Object.defineProperties + 该方法)。
  • ES8(ES2017)还带来了 async/await、Object.values、Object.entries、Object.getOwnPropertyDescriptors、padStart/padEnd 等。
  • ES9(ES2018)带来了对象的 rest/spread、Promise.prototype.finally、异步迭代等。

来源整理自:我的有道云笔记