JavaScript 对象
对象(Object)是 JavaScript 的核心数据类型,数组、函数、Date、正则等在底层都与对象有关。它用"键值对"把相关的属性和方法"装进一个盒子"。真实项目里用户、订单、商品几乎都以对象建模,它是 JS 数据组织的基石。
对象是什么
对象是一组键值对(key: value)的集合:键叫属性名,值可以是数字、字符串、数组,甚至是函数(值为函数时称为方法):
const user = {
name: "小明", // 字符串属性
age: 18, // 数字属性
hobbies: ["篮球", "吉他"], // 数组属性
sayHi: function () { // 方法:值为函数
console.log("你好,我是" + this.name);
}
};
user.sayHi(); // 输出:你好,我是小明
创建对象的三种方式
最常用的是对象字面量 {};也可以用 new Object() 或构造函数批量"生产"对象:
const a = { name: "张三" }; // 字面量(推荐)
const b = new Object(); // new Object()
b.name = "李四";
function Person(name) { // 构造函数模板
this.name = name;
}
const c = new Person("王五");
console.log(a.name, b.name, c.name); // 输出:张三 李四 王五
访问与修改属性
属性名已知时用点号;方括号 [] 可配合变量,还能访问带连字符的键;新增属性直接赋值,删除用 delete:
const user = { name: "小明", "like-color": "blue" };
const key = "name";
console.log(user.name, user[key], user["like-color"]);
// 输出:小明 小明 blue(方括号可配变量、能访问连字符键)
user.age = 18; // 新增属性
delete user.age; // 删除属性
console.log(user.age); // 输出:undefined
对象方法与 this
方法本质是"值为函数的属性",方法内部用 this 引用当前对象:
const user = {
name: "小明",
greet() { // 简洁写法,等价于 greet: function() { ... }
console.log("你好," + this.name);
}
};
user.greet(); // 输出:你好,小明
遍历对象的属性
for...in 遍历所有可枚举属性(含继承来的);Object.keys/values 只取自身属性,更常用:
const user = { name: "小明", age: 18 };
for (const key in user) {
console.log(key + "=" + user[key]);
}
// 输出:name=小明 age=18
console.log(Object.keys(user)); // 输出:['name','age']
console.log(Object.values(user)); // 输出:['小明', 18]
console.log(Object.entries(user)); // 输出:[['name','小明'],['age',18]]
对象是引用类型
对象变量保存的是"内存地址"而非数据本身:赋值只是复制引用,比较比的是引用而非内容;要复制内容用展开运算符:
const a = { n: 1 };
const b = a; // b 与 a 指向同一对象
b.n = 2;
console.log(a.n); // 输出:2(a 也变了)
const c = { ...a }; // 浅拷贝
c.n = 99;
console.log(a.n); // 输出:2(c 不影响 a)
console.log({ n: 1 } === { n: 1 }); // 输出:false(引用不同)
小结
对象 = 键值对集合 + 方法:字面量创建最顺手,点号或方括号访问属性,方法里用 this 指代当前对象;遍历用 for...in 或 Object.keys,复制与比较要牢记"引用类型"特性。这是后续函数、数组、JSON 的基础,务必吃透。