JavaScript 对象是存储键值对的集合。它们使用大括号 {} 创建,键和值用冒号分隔。属性可以通过点语法或方括号语法访问和修改。
const person = {
name: "John Doe",
age: 30,
};
// 点语法
console.log(person.name); // "John Doe"
// 方括号语法
console.log(person["age"]); // 30
对象方法
方法是附加到对象的函数。它们可以通过点语法或方括号语法调用。
const person = {
name: "John Doe",
age: 30,
greet: function () {
console.log(`Hello, my name is ${this.name}`);
},
};
// 点语法
person.greet(); // "Hello, my name is John Doe"
// 方括号语法
person["greet"](); // "Hello, my name is John Doe"
原型和继承
每个 JavaScript 对象都有一个原型,它包含对象的公共属性和方法。对象的原型可以通过 Object.getPrototypeOf()
访问。
对象可以通过 Object.create()
根据其他对象创建,从而继承后者的原型。
const parentObject = {
property: "parent-value",
};
const childObject = Object.create(parentObject);
childObject.property; // "parent-value"
对象比较
JavaScript 提供了两种比较对象的方法:
- 引用相等(===):检查两个对象是否引用相同的内存地址。
- 深度相等(lodash.isEqual):逐层比较两个对象的所有属性值,包括嵌套对象。
const obj1 = { a: 1 };
const obj2 = { a: 1 };
console.log(obj1 === obj2); // false (引用不同)
console.log(_.isEqual(obj1, obj2)); // true (深度相等)
对象遍历
可以使用 for...in
和 Object.keys()
遍历对象的键和值:
const person = {
name: "John Doe",
age: 30,
};
// 遍历键
for (const key in person) {
console.log(key); // "name" "age"
}
// 遍历值
Object.keys(person).forEach((key) => {
console.log(person[key]); // "John Doe" "30"
});
对象冻结和密封
- 冻结(Object.freeze):防止对象及其属性被修改或删除。
- 密封(Object.seal):防止添加新属性,但允许修改现有属性。
const person = {
name: "John Doe",
age: 30,
};
Object.freeze(person);
person.name = "Jane Doe"; // 不会更改(冻结)
特殊对象
JavaScript 提供了几个特殊对象,包括:
- 日期(Date):表示日期和时间。
- 正则表达式(RegExp):表示正则表达式。
- 错误(Error):表示错误。
最佳实践
使用对象时,建议遵循以下最佳实践:
- 使用点语法访问属性和方法。
- 避免修改原型对象。
- 考虑使用冻结或密封来保护敏感对象。
- 仅在有必要时创建自定义对象。