在 JavaScript 中,对象(Object)是最常用的数据类型之一,用于存储和管理数据。以下是对 JavaScript 对象的详细介绍:
一、对象的定义和创建
1. 使用对象字面量
const obj = {
key1: 'value1',
key2: 'value2',
key3: function() {
console.log('This is a method');
}
};
2. 使用构造函数
const obj = new Object();
obj.key1 = 'value1';
obj.key2 = 'value2';
obj.key3 = function() {
console.log('This is a method');
};
3. 使用类(Class)
class MyClass {
constructor(key1, key2) {
this.key1 = key1;
this.key2 = key2;
}
method() {
console.log('This is a method');
}
}
const obj = new MyClass('value1', 'value2');
4. 使用 Object.create()
const prototype = {
greet: function() {
console.log('Hello!');
}
};
const obj = Object.create(prototype);
obj.key1 = 'value1';
二、对象的属性和方法
1. 属性的访问
- 点语法
console.log(obj.key1);
- 方括号语法
console.log(obj['key1']);
2. 属性的增删改查
- 添加属性
obj.newKey = 'newValue';
- 修改属性
obj.key1 = 'newValue1';
- 删除属性
delete obj.key1;
- 检查属性是否存在
console.log('key1' in obj); // true console.log(obj.hasOwnProperty('key1')); // true
三、遍历对象
1. for...in
遍历对象的可枚举属性(包括继承的属性)。
for (const key in obj) {
console.log(key, obj[key]);
}
2. Object.keys()
返回对象的所有可枚举自身属性的键。
Object.keys(obj).forEach(key => {
console.log(key, obj[key]);
});
3. Object.values()
返回对象所有可枚举自身属性的值。
Object.values(obj).forEach(value => {
console.log(value);
});
4. Object.entries()
返回对象所有可枚举自身属性的键值对。
Object.entries(obj).forEach(([key, value]) => {
console.log(key, value);
});
四、对象的特性
1. 动态特性
对象可以在运行时动态添加、修改或删除属性。
2. 原型链
每个对象都有一个原型对象(prototype
),通过原型链可以继承属性和方法。
console.log(obj.__proto__); // 查看原型
3. 对象的不可变性
Object.freeze(obj)
:冻结对象,使其不能修改。Object.seal(obj)
:封闭对象,使其不能添加或删除属性,但可以修改现有属性值。
五、对象的常用方法
1. 克隆对象
- 浅拷贝
const newObj = Object.assign({}, obj); const newObj2 = { ...obj };
- 深拷贝
const deepClone = JSON.parse(JSON.stringify(obj));
2. 合并对象
const obj1 = { a: 1 };
const obj2 = { b: 2 };
const mergedObj = { ...obj1, ...obj2 };
3. 获取对象属性描述符
const descriptor = Object.getOwnPropertyDescriptor(obj, 'key1');
console.log(descriptor);
4. 防止扩展对象
Object.preventExtensions(obj); // 禁止添加新属性
六、特殊对象
1. 数组
数组本质上是对象,键是索引。
const arr = [1, 2, 3];
console.log(typeof arr); // object
2. 函数
函数也是对象,可以有属性和方法。
function func() {}
func.prop = 'value';
console.log(func.prop);
3. 全局对象
例如浏览器中的 window
和 Node.js 中的 global
。
七、常见问题和注意事项
-
对象属性名可以是字符串或符号
const sym = Symbol('key'); obj[sym] = 'value'; console.log(obj[sym]);
-
引用类型 对象是按引用传递的。
const obj1 = { a: 1 }; const obj2 = obj1; obj2.a = 2; console.log(obj1.a); // 2
-
对象的 JSON 表示
- 转换为 JSON
const jsonString = JSON.stringify(obj);
- 解析 JSON
const parsedObj = JSON.parse(jsonString);
- 转换为 JSON