面试题(十):js中 ‌Object对象 常用方法

147 阅读2分钟

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 被冻结