ES6 新增对象扩展

1. Object.is() —— 严格判断两个值是否相等

Object.is(NaN, NaN); // true
Object.is(+0, -0);   // false

与 === 不同的是:Object.is 把 NaN 和 NaN 视为相等,把 +0 与 -0 视为不相等。

2. Object.assign(target, source1, source2) —— 对象合并

将 source 对象的可枚举属性浅拷贝到 target。

const a = { x: 1 };
const b = { y: 2 };
Object.assign(a, b); // { x: 1, y: 2 }

3. Object.setPrototypeOf() —— 设置原型对象

Object.setPrototypeOf(object, prototype);

4. Object.getPrototypeOf() —— 读取原型对象

Object.getPrototypeOf(obj); // 等价于 obj.__proto__,但更推荐

5. Object.values() —— 返回自身可遍历属性的值数组

Object.values({ a: 1, b: 2 }); // [1, 2]

6. Object.entries() —— 返回自身可遍历属性的键值对数组

Object.entries({ a: 1, b: 2 }); // [['a', 1], ['b', 2]]

补充:其他常用 ES6 对象扩展:

  • Object.keys()(ES5 已有)—— 返回自身可枚举属性键的数组。
  • Object.fromEntries()(ES2019)—— Object.entries 的逆操作,可把 [['a',1]] 转回 {a:1},常配合 URLSearchParams 使用。
  • 对象展开运算符 { ...obj } —— 浅拷贝,等价于 Object.assign({}, obj),但更简洁。
  • 属性名简写与方法简写:{ x, fn() {} }。
  • 计算属性名:{ [key_${i}]: i },模板中通过 [] 把变量或表达式作为属性名。

来源整理自:vue3js.cn 面试官系列