对象

假设你正在描述一个用户:姓名、电子邮件、年龄、是否已登录。你可以把这些分散到四个独立的变量中,但它们应该放在一起,把它们分开意味着每次提到"用户"时都要传递四样东西。对象让你把所有内容聚集在一个值中,其中每一部分都有一个你可以查找的名称。你处理的大多数数据(用户、产品、购物车)的形状正好是这样。
创建对象
对象 是一个命名值的集合,用花括号编写。在其中,你列出 key: value 对,用逗号分隔。键是名称;值是它保存的内容:
const user = {
name: "李明",
age: 27,
};
console.log(user.name); // 李明你用一个点和键读取一个值:user.name。这称为点符号,也是你最常使用的方式。左边是键,右边是它存储的值。
还有第二种方式来读取值,使用方括号,将键作为字符串:
console.log(user["name"]); // 李明大多数时候点符号读起来更干净,所以使用它。当键不是普通单词时(比如它包含空格),或者你不知道键是什么且它在另一个变量中时,括号才派上用场。
const product = {
title: "台灯",
price: 40,
inStock: true,
};
console.log(`${product.title} costs ${product.price}`); // 台灯 costs 40对象是像任何其他值一样的值。你可以将其存储在 const 中,将其放在数组中,将其传递给函数,并返回它。键给其部分命名,这正是重点:product.price 说明是什么,而存储在变量中的裸 40 则不能。
key: value 对。用点和键读取值,如 user.name。仅当键中有奇怪字符或存在于变量中时才使用方括号形式。 修改对象
对象一旦创建就不是固定的。你可以添加新键、更改现有键或完全删除一个键。要添加或更新,分配给该键:
const user = {
name: "李明",
};
user.age = 30; // 添加新键
user.name = "李明强"; // 更新现有的
console.log(user); // { name: "李明强", age: 30 }如果键已存在,分配给它会替换该值。如果不存在,它会被创建。要删除键,使用 delete:
delete user.age;
console.log(user); // { name: "李明强" }这是让人惊讶的部分。一个 const 对象仍然可以修改其属性。 const 意味着名称 user 不能指向不同的对象,但它指向的对象是公平的游戏:
const cart = { total: 0 };
cart.total = 25; // 好的,改变内部的内容
// cart = { total: 25 }; // 这会错误,重新分配名称delete 删除一个。惊喜是 const:它阻止你将 user 指向不同的对象,但你仍然可以更改它持有的对象内的内容。我花了一段时间才停止期望 const 锁定一切。 方法和 this
对象中的值可以是函数。当它是时,它被称为 方法:对象可以做的东西,而不是它存储的事实。你用相同的点加括号调用它:
const user = {
name: "李明",
greet() {
return `Hi, I am ${this.name}`;
},
};
console.log(user.greet()); // Hi, I am 李明内部的新词是 this。当你调用 user.greet() 时,this 意味着"调用此方法的对象",这里是 user。所以 this.name 从同一对象读取 name 键。这就是方法如何到达其自己对象的值而不需要你传入它们。
user.greet()。在其内部,this 意味着调用该方法的对象,所以 this.name 读取该对象自己的 name。这就是方法如何获取其自己对象的值。 对象和数组一起
大多数真实数据是对象列表:许多用户、许多产品,每个对象一条具有相同键的记录。你把对象放在 数组 中:
const products = [
{ title: "台灯", price: 40 },
{ title: "笔记本", price: 6 },
{ title: "笔", price: 3 },
];
console.log(products[0].title); // 台灯你通过其位置到达一个对象(products[0]),然后用点访问其字段(.title)。连在一起,products[0].title 读取第一个产品的标题。
要从每个对象读取一个字段,循环遍历数组:
for (const product of products) {
console.log(product.title);
}
// 台灯
// 笔记本
// 笔循环的每一圈,product 是列表中的一个对象,product.title 读取其标题。这种形状,你循环遍历的对象数组,是你将进行的大多数数据工作。
products[0] 到达一个,然后用 products[0].title 到达一个字段。循环遍历数组接触每条记录,你有你将进行的大多数数据工作的模式。 对象进一步学习
对象和 数组 是你将不断使用的两个结构,你处理的大多数数据是两者的某种嵌套:具有数组字段的对象、对象数组和两者的组合。将它们与 数组方法 配对,你可以将几乎任何数据形成你需要的形式。
下一步是在页面中把对象投入使用。当你到达 DOM 时,你读取和更改的元素也是对象,带有你设置的键和你调用的方法,所以这里的一切直接转移过去。

