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、异步迭代等。
来源整理自:我的有道云笔记



