JavaScript 对象
- JavaScript 对象是属性和方法的集合。
- JavaScript 对象是拥有属性和方法的实体。
- 对象是类的实例。
- 对象是 JavaScript 中的复合数据类型,用于存储键值对的集合和方法。
键值对形式:key: value
键是字符串(或符号),值可以是任意数据类型。
创建对象
- 使用对象字面量创建对象
new Object()
:const person = { name: "John", age: 30, sayHello: function() { console.log("Hello, my name is " + this.name); } }; console.log(person.name); console.log(person.sayHello());
优点:简洁直观,适合创建简单的对象。使用对象字面量创建对象是最简单的方式,可以直接定义对象的结构和属性。
缺点:不支持动态创建对象,适用于静态结构。
```
const person = new Object();
person.name = '张三';
person.age = 20;
console.log(person); // 输出: { name: 'Bob', age: 30 }
```
- 使用构造函数创建对象
new Object()
:function Person(name, age) { this.name = name; this.age = age; this.S = function() { console.log("Hello, my name is " + this.name); }; } const person = new Person("John", 30); console.log(person.name); console.log(person.sayHello());
优点:可以动态创建对象,适用于动态结构。使用构造函数创建对象可以在运行时动态地添加属性和方法。
缺点:需要定义构造函数,可能会增加代码量。
const prototype = { greet: function () { return 'Hello'; } };
const obj = Object.create(prototype);
console.log(obj.greet()); //
操作对象
- 访问属性
点操作符 console.log(person.name); // 方括号操作符 console.log(person['name']);
- 添加属性
person.address = '123 Main St';
- 删除属性
delete person.age;
- 遍历属性
for (let key in person) { console.log(key + ': ' + person[key]); }
- 修改属性
person.age = 26; person['name'] = 'tom'; console.log(person); //
对象的高级用法
- 对象方法
对象中的方法是赋值给属性的函数:const calc = { add(a, b) { return a + b; }, multiply(a, b) { return a * b; } }; console.log(calc.add(2, 3)); // 输出:
- 对象解构
解构用于快速提取属性值:const { name, age } = person; console.log(name, age);
- 原型继承
原型继承允许对象继承其他对象的属性和方法:const person = { name: '张三', age: 20 }; const student = Object.create(person); student.sayHello = function() { console.log('Hello, my name is ' + this.name); }; student.sayHello(); // 输出: Hello, my name is 张三
- 合并对象
合并对象可以将多个对象的属性合并到一个对象中:
Object.assign()
const obj1 = { a: 1, b: 2 }; const obj2 = { c: 3, d: 4 }; const mergedObj = Object.assign({}, obj1, obj2); console.log(mergedObj); // 输出: { a: 1, b: 2, c: 3, d: 4 }
扩展运算符
const obj1 = { a: 1, b: 2 }; const obj2 = { c: 3, d: 4 }; const mergedObj = {...obj1,...obj2 }; console.log(mergedObj); // 输出: { a: 1, b: 2, c: 3, d: 4 }
- 对象冻结与密封
冻结对象可以防止属性被添加、修改或删除:
Object.freeze(obj);
密封对象可以防止属性被添加或删除,但可以修改属性的值:const obj = Object.freeze({ a: 1 }); obj.a = 2; // 无效
Object.seal(obj);
const obj = Object.seal({ a: 1 }); obj.a = 2; // 有效 obj.b = 3; // 无效