使用擴展運算符(...
)可以輕鬆合併物件:
let person = { name: 'Alice', age: 30 };
let contact = { email: 'alice@example.com' };
let merged = { ...person, ...contact };
console.log(merged); // { name: 'Alice', age: 30, email: 'alice@example.com' }
使用 Object.assign()
進行淺拷貝:
let shallowCopy = Object.assign({}, person);
使用 JSON.parse()
和 JSON.stringify()
進行深拷貝:
let deepCopy = JSON.parse(JSON.stringify(person));
可以在運行時動態添加或修改物件的屬性:
let dynamicProperty = 'height';
person[dynamicProperty] = 170; // 添加新屬性
Object.defineProperty()
這個方法可以定義物件的屬性,並設定屬性描述符:
Object.defineProperty(person, 'fullName', {
get() {
return `${this.name} Smith`;
},
enumerable: true
});
使用 get
和 set
定義計算屬性:
let user = {
firstName: 'John',
lastName: 'Doe',
get fullName() {
return `${this.firstName} ${this.lastName}`;
},
set fullName(name) {
[this.firstName, this.lastName] = name.split(' ');
}
};
user.fullName = 'Jane Smith';
console.log(user.fullName); // 'Jane Smith'
使用原型繼承或 class
語法來創建繼承關係:
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name} makes a noise.`);
}
}
class Dog extends Animal {
speak() {
console.log(`${this.name} barks.`);
}
}
let dog = new Dog('Rex');
dog.speak(); // 'Rex barks.'
Proxy
監控物件操作Proxy
允許你攔截和自定義對物件的操作:
let target = {};
let handler = {
set(obj, prop, value) {
console.log(`Setting ${prop} to ${value}`);
obj[prop] = value;
return true;
}
};
let proxy = new Proxy(target, handler);
proxy.name = 'Alice'; // 'Setting name to Alice'
Reflect
進行操作Reflect
對象提供了一組靜態方法,用於操作物件:
let obj = { name: 'Alice' };
Reflect.set(obj, 'age', 30); // 設置屬性
console.log(obj); // { name: 'Alice', age: 30 }
使用 JSON.stringify()
和 JSON.parse()
對物件進行序列化和反序列化:
let jsonString = JSON.stringify(person);
let parsedPerson = JSON.parse(jsonString);
Map
和 Set
這些新型態的資料結構在某些情況下可以替代傳統物件,提供更好的性能和功能:
let map = new Map();
map.set('name', 'Alice');
console.log(map.get('name')); // 'Alice'
let set = new Set();
set.add(1);
set.add(2);
set.add(1); // 重複值將被忽略
console.log(set.size); // 2
上述展示了 JavaScript 物件的功能,能夠幫助你在開發中更靈活地管理和操作數據。掌握這些技巧將有助於提高代碼的可讀性和可維護性。