对象合并:Object.assign()
克隆对象:Object.assign({}, origin)
属性的遍历
for...in
返回自身和继承的 enumerable 属性
Object.keys()
返回自身的 enumerable 属性
Object.getOwnPropertyNames()
返回自身的 enumerable 和 innumerable 属性
Object.getOwnPropertySymbols()
返回自身的所有 Symbol 属性
Reflect.ownKeys()
返回自身的所有键名
Object.create(),Object.getPrototypeOf(),Object.setPrototypeOf()
尽量不要直接操作__proto__
,而是使用
Object.setPrototypeOf()
Object.getPrototypeOf()
Object.create()
代替
使用示例:
// es5 的写法
obj.__proto__ = someOtherObj;
// es6 的写法
var obj = Object.create(someOtherObj);
// 格式
Object.setPrototypeOf(object, prototype)
// 用法
const o = Object.setPrototypeOf({}, null);
Object.getPrototypeOf(obj);
super关键字
指向当前对象(定义时所在对象)的__proto__
,只能用在对象的方法之中(只能用简写的对象方法)
const proto = {
foo: 'hello'
};
const obj = {
foo: 'world',
find() {
return super.foo;
}
};
Object.setPrototypeOf(obj, proto);
obj.find() // "hello"
Object.keys(),Object.values(),Object.entries()
可以和 for...of 配合使用,用于遍历对象
let {keys, values, entries} = Object;
let obj = { a: 1, b: 2, c: 3 };
for (let key of keys(obj)) {
console.log(key); // 'a', 'b', 'c'
}
for (let [key, value] of entries(obj)) {
console.log([key, value]); // ['a', 1], ['b', 2], ['c', 3]
}
Object.keys(obj)
返回由键名组成的数组
Object.values(obj)
返回由键值组成的数组
Object.entries()
返回由键值对组成的数组
使用 Object.entries() 将对象转为Map结构:
const obj = { foo: 'bar', baz: 42 };
const map = new Map(Object.entries(obj));
map // Map { foo: "bar", baz: 42 }
对象的扩展运算符
const [a, ...b] = [1, 2, 3];
a // 1
b // [2, 3]
let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };
x // 1
y // 2
z // { a: 3, b: 4 }
let z = { a: 3, b: 4 };
let n = { ...z };
n // { a: 3, b: 4 }
合并两个对象:
let ab = { ...a, ...b };
// 等同于
let ab = Object.assign({}, a, b);