JavaScript: JavaScript 对象

最后更新:2026-10-13

对象是 JavaScript 中最核心的数据结构。你可以把它想象成一张信息卡——正面写着"姓名:张三",背面写着"年龄:20"。每一项信息都有一个键(key)和一个值(value),合在一起就是键值对。

相关对象:Object.keys const class

1. 对象的创建与操作

用花括号 {} 直接写出对象,这是最常见的方式:

HTML
<script>
const student = {
  name: "张三",
  age: 20,
  major: "计算机"
};
console.log(student);
</script>

键和值之间用冒号分隔,多个键值对之间用逗号分隔。最后一个键值对后面的逗号是允许的(叫尾逗号),加上反而方便后续增删。

(2) 访问属性

两种方式访问对象的属性:

方式 写法 适用场景
点语法 obj.name 属性名是合法标识符时
方括号 obj["name"] 属性名含特殊字符、用变量动态访问时

方括号的最大优势:可以用变量作为键名。

HTML
<script>
const key = "name";
console.log(student[key]); // 等价于 student["name"]
</script>

(3) 修改和添加属性

对象创建后,你可以随时修改已有属性或添加新属性——哪怕对象是用 const 声明的(const 只锁引用,不锁内容)。

HTML
<script>
student.age = 21;          // 修改
student.grade = "大三";     // 添加新属性
console.log(student);
</script>

(4) 删除属性

用 delete 操作符彻底移除一个属性:

HTML
<script>
delete student.grade;
console.log(student);
</script>

删除后再次访问会得到 undefined。

(5) 方法

对象里的函数叫方法。把函数作为属性的值,对象就"会做事"了:

HTML
<script>
const dog = {
  name: "旺财",
  bark() {
    return "汪汪!我是" + this.name;
  }
};
console.log(dog.bark());
</script>

(6) this 关键字

this 指向"当前对象"——谁调用这个方法,this 就是谁。这是 JavaScript 最容易踩坑的地方之一:如果方法被单独取出来调用,this 就不再是原来的对象了。

HTML
<script>
const bark = dog.bark;
console.log(bark()); // this 不再指向 dog,可能指向 window 或 undefined
</script>

(7) 构造函数

需要批量创建同结构的对象时,用构造函数:

HTML
<script>
function Person(name, age) {
  this.name = name;
  this.age = age;
  this.sayHi = function() {
    return "你好,我是" + this.name;
  };
}

const p1 = new Person("李四", 25);
const p2 = new Person("王五", 30);
console.log(p1.sayHi());
console.log(p2.sayHi());
</script>

new 做了三件事:创建空对象 → 把 this 指向它 → 返回这个对象。

(8) Object.keys / values / entries

这三个静态方法分别返回对象的键、值、键值对数组:

方法 返回
Object.keys(obj) ["name", "age"]
Object.values(obj) ["张三", 20]
Object.entries(obj) [["name","张三"], ["age",20]]

遍历对象时非常好用:Object.keys(obj).forEach(key => ...)。


▶ 示例:创建学生对象并展示信息

▶ 试一试

▶ 示例:点语法与方括号访问对比

▶ 试一试

▶ 示例:动态添加、修改、删除属性

▶ 试一试

▶ 示例:构造函数与 Object.keys/values/entries

▶ 试一试

相关对象:Object.keys const class

❓ 常见问题

Q 用 const 声明的对象还能修改属性吗?
A 能。const 锁的是变量的引用(即让它始终指向同一个对象),而不是对象本身的内容。你可以往里面加属性、改属性、删属性,但不能重新赋值 obj = {}。
Q 什么时候用方括号而不是点语法?
A 当属性名包含空格或连字符(如 "home-city"),或者属性名存储在变量中需要动态访问时,必须用方括号。其他情况点语法更简洁,优先使用。
Q 构造函数忘记写 new 会怎样?
A this 会指向全局对象(严格模式下是 undefined),导致属性挂错地方甚至报错。这是一个经典坑——后来 ES6 的 class 语法帮你自动处理了这个问题。

📖 小节

📝 作业

  1. 创建一个 book 对象,包含 title、author、year 三个属性和一个 getSummary() 方法,方法返回 "《title》by author, published in year" 格式的字符串。
  2. 写一个构造函数 Car(brand, model, year),用它创建 3 辆车,然后用 Object.keys 遍历其中一辆车的所有属性名。
  3. 给上面任意一辆车动态添加一个 drive() 方法(返回 "品牌型号正在行驶"),然后调用它。体会 this 在方法中如何指向当前对象。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏