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' |
- 删除属性
- 遍历属性
| 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(); |
- 合并对象
合并对象可以将多个对象的属性合并到一个对象中:
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; |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了