Object.keys () : 遍历对象并返回对象的所有键
const person = { name: '追光的栗子', age: 30, gender: 'man' };
const keys = Object.keys(person);
console.log(keys); // 输出:['name', 'age', 'gender']
Object.values () : 遍历对象并返回对象的值
const person = { name: '追光的栗子', age: 30, gender: 'man' };
const values = Object.values(person);
console.log(values); // 输出:['追光的栗子', 30, 'man']
Object.entries () : 返回对象可枚举的键值对([key, value]) 数组
const person = { name: '追光的栗子', age: 30, gender: 'man' };
const entries = Object.entries(person);
console.log(entries); // 输出:[ ["name", "追光的栗子"], ["age", 30 ], [ "gender", "man"] ]
Object.create () : 创建一个新对象,使用现有对象作为新创建对象的原型
const parent = {
sayHello: function() {
console.log('Hello from parent!');
}
};
const child = Object.create(parent);
child.sayHi = function() {
console.log('Hi from child!');
};
child.sayHello(); // 输出:Hello from parent!
child.sayHi(); // 输出:Hi from child!
Object.assign () : 将所有可枚举和拥有的属性从源对象复制到目标对象,它返回目标对象,也称为浅拷贝
const target = { a: 1, b: 2 };
const source = { b: 3, c: 4 };
const merged = Object.assign(target, source);
console.log(merged); // 输出:{a: 1, b: 3, c: 4}
console.log(target); // 输出:{a: 1, b: 3, c: 4},注意 target 被修改了
console.log(source); // 输出:{ b: 3, c: 4}
Object.seal () : 用于密封一个对象,阻止添加新属性并将所有现有属性标记为不可配置。密封一个对象后,仍然可以修改现有属性的值,但不能删除属性或添加新属性
const obj = { prop1: 'value1', prop2: 'value2' };
Object.seal(obj);
// 尝试添加新属性
obj.newProp = 'newValue';
console.log(obj); // 输出仍然是 { prop1: 'value1', prop2: 'value2' },新属性未被添加
// 尝试删除现有属性
delete obj.prop1;
console.log(obj); // 输出仍然是 { prop1: 'value1', prop2: 'value2' },现有属性未被删除
// 修改现有属性的值
obj.prop1 = 'newValue1';
console.log(obj); // 输出 { prop1: 'newValue1', prop2: 'value2' },可以修改现有属性的值
Object.freeze () : 用于冻结一个对象,冻结后的对象既不能添加新属性,也不能删除现有属性,并且不能修改现有属性的值
const obj = { prop1: 'value1', prop2: 'value2' };
Object.freeze(obj);
// 尝试添加新属性
obj.newProp = 'newValue';
console.log(obj); // 输出仍然是 { prop1: 'value1', prop2: 'value2' },新属性未被添加
// 尝试删除现有属性
delete obj.prop1;
console.log(obj); // 输出仍然是 { prop1: 'value1', prop2: 'value2' },现有属性未被删除
// 尝试修改现有属性的值
obj.prop1 = 'newValue1';
console.log(obj); // 输出仍然是 { prop1: 'value1', prop2: 'value2' },现有属性的值未被修改
如何判断一个对象是否被冻结?
使用 Object.isFrozen() 方法来判断一个对象是否被冻结
const obj1 = { prop: 'value' };
const obj2 = Object.freeze({ anotherProp: 'anotherValue' });
console.log(Object.isFrozen(obj1)); // 输出 false,obj1 没有被冻结
console.log(Object.isFrozen(obj2)); // 输出 true,obj2 被冻结