Object.keys(obj) :返回一个对象所有可枚举的属性的名称组成的数组
const obj = { a: 1, b: 2, c: 3 };
const keys = Object.keys(obj);
console.log(keys); // ['a', 'b', 'c']
Object.values(obj):返回一个对象所有可枚举的属性的值组成的数组。
const obj = { a: 1, b: 2, c: 3 };
const values = Object.values(obj);
console.log(values); // [1, 2, 3]
Object.entries(obj):返回一个对象所有可枚举的属性的键值对组成的数组。
const obj = { a: 1, b: 2, c: 3 };
const entries = Object.entries(obj);
console.log(entries); // [['a', 1], ['b', 2], ['c', 3]]
Object.hasOwnProperty(prop):判断一个对象是否有指定的属性。
const obj = { a: 1, b: 2, c: 3 };
const hasProp = obj.hasOwnProperty('a');
console.log(hasProp); // true
Object.assign(target, source1, [source2, …]):将一个或多个对象的属性拷贝到目标对象。
const obj1 = { a: 1 };
const obj2 = { b: 2 };
const obj3 = { c: 3 };
const result = Object.assign(obj1, obj2, obj3);
console.log(result); // { a: 1, b: 2, c: 3 }
Object.freeze(obj):冻结一个对象,使其无法添加、删除、修改属性。
const obj = { a: 1, b: 2 };
Object.freeze(obj);
obj.c = 3; // 添加属性无效
obj.a = 100; // 修改属性无效
delete obj.b; // 删除属性无效
console.log(obj); // { a: 1, b: 2 }
Object.is(obj1, obj2):判断两个值是否严格相等。
console.log(Object.is(1, 1)); // true
console.log(Object.is('foo', 'foo')); // true
console.log(Object.is({}, {})); // false
console.log(Object.is(+0, -0)); // false
console.log(Object.is(NaN, NaN)); // true
Object.getOwnPropertyDescriptor(obj, prop):获取指定属性的属性描述符。
const obj = { value: 123 };
const descriptor = Object.getOwnPropertyDescriptor(obj, 'value');
console.log(descriptor); // { value: 123, writable: true, enumerable: true, configurable: true }
Object.setPrototypeOf(obj, prototype):设置对象的原型(即设置其继承关系)。
const obj1 = {};
const obj2 = { value: 123 };
Object.setPrototypeOf(obj1, obj2);
console.log(obj1.__proto__ === obj2); // true
Object.create(proto, [propertiesObject]):使用指定的原型来创建一个新的对象。
const obj1 = { a: 1 };
const obj2 = Object.create(obj1, { b: { value: 2 }});
console.log(obj2.a); // 1
console.log(obj2.b); // 2
Object.fromEntries(iterable):从一个可迭代对象中创建一个新的对象。
const entries = [['a', 1], ['b', 2]];
const obj = Object.fromEntries(entries);
console.log(obj); // { a: 1, b: 2 }
Object.defineProperties(obj, props):定义一个或多个属性的描述符。
const obj = {};
Object.defineProperties(obj, {
a: { value: 1 },
b: { value: 'hello' }
});
console.log(obj.a); // 1
console.log(obj.b); // 'hello'
Object.defineProperty(obj, prop, descriptor):定义一个属性的描述符。
const obj = {};
Object.defineProperty(obj, 'a', {
value: 123,
writable: false,
enumerable: true,
configurable: false
});
console.log(obj.a); // 123
obj.a = 456; // 不可写,赋值无效
console.log(obj.a); // 123
for (let key in obj) { console.log(key); } // 可枚举
delete obj.a; // 不可配置,删除无效
console.log(obj.a); // 123
Object.getOwnPropertyNames(obj):返回一个对象上所有的属性名(不包括Symbol)。
const obj = { a: 1, b: 2 };
const keys = Object.getOwnPropertyNames(obj);
console.log(keys); // ['a', 'b']
Object.getOwnPropertySymbols(obj):返回一个对象上所有的Symbol属性名。
const sym = Symbol('key');
const obj = { a: 1, [sym]: 10 };
const symbols = Object.getOwnPropertySymbols(obj);
console.log(symbols); // [Symbol('key')]
Object.isExtensible(obj):判断一个对象是否可扩展(是否可以添加新属性)。
const obj1 = { a: 1 };
const obj2 = { b: 2 };
console.log(Object.isExtensible(obj1)); // true
Object.preventExtensions(obj1);
console.log(Object.isExtensible(obj1)); // false
console.log(Object.isExtensible(obj2)); // true
Object.preventExtensions(obj):防止一个对象被扩展(不能再添加新属性)。
const obj = { a: 1 };
Object.preventExtensions(obj);
obj.b = 2;
console.log(obj); // { a: 1 }
Object.isSealed(obj):判断一个对象是否被封闭(不能再添加、删除属性)。
const obj = Object.freeze({ a: 1 });
console.log(Object.isSealed(obj)); // true
Object.seal(obj):防止一个对象被封闭(不能再添加、删除属性,但可以修改属性值)。
const obj = { a: 1 };
Object.seal(obj);
obj.b = 2; // 无法添加新属性
delete obj.a; // 无法删除属性
obj.a = 100; // 可以修改属性值
console.log(obj); // { a: 100 }