六维教程

JavaScript 属性删除与遍历

上一篇文章 JavaScript 对象是什么 讲了对象的创建和读写。这一节讲和属性有关的两个操作,删除属性以及遍历所有属性。

delete 删除属性

delete 运算符用来删除对象的属性,写法是 delete 对象.键名。删除之后键不存在,再访问得到 undefined。

const person = {
  name: '小明',
  age: 20,
  city: '北京',
};
delete person.city;
console.log(person.city);
console.log(person);

第一行输出 undefined。第二行输出的对象里只剩 name 和 age,city 已经没了。

delete 平时用得不多,在清理临时数据时会碰到。注意 delete 只能删对象的属性,不能用来删变量。

in 检查属性是否存在

判断对象有没有某个属性,用 in 运算符,写法是 '键名' in 对象,返回 true 或 false。

const person = {
  name: '小明',
  age: 20,
};
console.log('name' in person);
console.log('city' in person);

第一行输出 true,第二行输出 false。注意键名要加引号,写成字符串。

为什么需要 in。直接访问不存在的属性会得到 undefined,但属性值本身也可能是 undefined,这时就看不出属性到底存不存在。

const a = { x: undefined };
const b = {};
console.log(a.x === undefined);
console.log(b.x === undefined);

两行都输出 true,可 a 有 x 属性,b 没有。用 in 才能区分。

console.log('x' in a);
console.log('x' in b);

第一行输出 true,第二行输出 false。只想判断属性是否存在时,用 in 更准确。

for…in 遍历属性

for…in 是对象专用的遍历语法。每次循环拿到一个键名,配合 对象[键名] 取出对应的值。

const person = {
  name: '小明',
  age: 20,
  city: '北京',
};
for (const key in person) {
  console.log(key + '=' + person[key]);
}

依次输出 name=小明、age=20、city=北京,每行一个。循环变量 key 拿到的是键名字符串,所以取值要用方括号 person[key],写 person.key 就错了,那会去查名为 key 的属性。

一个注意点,for…in 会遍历到原型链上继承下来的属性。原型是对象共享机制的一部分,详细内容见 JavaScript 原型是什么。目前写的对象都是自己定义键名,遍历到的就是这些键。

小结

delete 删除属性,删除后访问得到 undefined。in 运算符检查属性是否存在,返回布尔值,比直接比较 undefined 更准确。for…in 遍历对象属性,循环变量是键名字符串,配合方括号取值。for…in 会把原型链上的属性也带出来,原型相关内容后面单独讲。

上一篇
JavaScript 对象是什么
下一篇
JavaScript 对象方法