使用对象字面量
const obj = { key: 'value' };
使用构造函数
const obj2 = new Object();
obj2.key = 'value';
使用点操作符
const obj = { key: 'value' };
console.log(obj.key); // value
使用方括号
console.log(obj['key']); // value
修改属性值
obj.key = 'newValue';
obj['key'] = 'newValue';
obj.newKey = 'newValue';
obj['anotherKey'] = 'anotherValue';
delete obj.key;
console.log('key' in obj); // true
console.log(obj.hasOwnProperty('key')); // true
const obj1 = { a: 1 };
const obj2 = { b: 2 };
const mergedObj = Object.assign({}, obj1, obj2); // { a: 1, b: 2 }
const obj1 = { a: 1 };
const obj2 = { ...obj1, b: 2 }; // { a: 1, b: 2 }
const obj = { a: 1, b: 2 };
const { a, b } = obj;
console.log(a); // 1
console.log(b); // 2
const obj = { a: 1, b: { c: 2 } };
const deepCopy = JSON.parse(JSON.stringify(obj));
注意:
这种方法不能处理 undefined、函数 和 Symbol 属性。
function deepCopy(obj) {
if (typeof obj !== 'object' || obj === null) {
return obj;
}
const copy = Array.isArray(obj) ? [] : {};
for (const key in obj) {
copy[key] = deepCopy(obj[key]);
}
return copy;
}
const obj = { a: 1, b: { c: 2 } };
const deepCopy = deepCopy(obj);
const obj = { a: 1, b: 2 };
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
console.log(key, obj[key]); // a 1, b 2
}
}
Object.keys(obj).forEach(key => {
console.log(key, obj[key]); // a 1, b 2
});
Object.entries(obj).forEach(([key, value]) => {
console.log(key, value); // a 1, b 2
});
const obj = Object.assign({ a: 1 }, { b: 2 }, { c: 3 }); // { a: 1, b: 2, c: 3 }
const obj = Object.create({ a: 1 });
console.log(obj.a); // 1
Object.freeze(obj);
obj.a = 2; // 不会报错,但不会修改对象
Object.is('foo', 'foo'); // true
Object.is({}, {}); // false