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 的基础,务必吃透。

笔记加载中…