JavaScript 的 for-in会枚举原型链中继承而来的属性;通过 object.hasOwnProperty(variable)可以过滤从其原型链里找到的属性
时间: 2023-05-26 07:03:28 浏览: 149
,只枚举对象本身拥有的属性。下面是一个例子:
```javascript
var obj = {
prop1: 'value1',
prop2: 'value2'
};
// 添加属性到原型对象
Object.prototype.prop3 = 'value3';
// for-in循环会枚举原型对象的属性
for (var prop in obj) {
console.log(prop); // 输出 prop1, prop2 和 prop3
}
// 使用 hasOwnProperty 过滤原型对象的属性
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
console.log(prop); // 输出 prop1 和 prop2,不包括 prop3
}
}
```
注意,如果你使用 ES6 及以上的版本,可以使用 `Object.keys(obj)` 代替 for-in 循环来获取对象本身的属性。这个方法会返回一个由对象自身属性名组成的数组。
相关问题
for in
`for...in` 是 JavaScript 中的一种循环语句,可以用来遍历一个对象的属性。它的语法如下:
```javascript
for (variable in object) {
// code to be executed
}
```
其中,`variable` 是一个变量名,表示当前遍历到的属性名;`object` 是被遍历的对象。在循环中,每次迭代,变量 `variable` 会被赋值为对象的一个属性名,然后执行循环体中的代码。
下面是一个示例,演示如何使用 `for...in` 循环遍历一个对象的属性:
```javascript
const person = {
name: 'Alice',
age: 30,
gender: 'female'
};
for (let key in person) {
console.log(key + ': ' + person[key]);
}
```
在这个示例中,我们定义了一个 `person` 对象,包含了 `name`、`age` 和 `gender` 三个属性。然后使用 `for...in` 循环遍历 `person` 对象的属性,将每个属性名和属性值输出到控制台。输出结果如下:
```
name: Alice
age: 30
gender: female
```
需要注意的是,`for...in` 循环会遍历对象的所有可枚举属性,包括继承来的属性和原型链上的属性。如果只需要遍历对象自身的属性,可以使用 `Object.hasOwnProperty()` 方法进行过滤,例如:
```javascript
for (let key in person) {
if (person.hasOwnProperty(key)) {
console.log(key + ': ' + person[key]);
}
}
```
js中的for in
在 JavaScript 中,`for...in` 是一个用于遍历对象的循环语句。它允许你遍历对象的属性,并执行相应的操作。
`for...in` 语法如下:
```javascript
for (variable in object) {
// 在每次迭代中执行的代码
}
```
其中,`variable` 是一个变量,用于存储当前迭代中对象的属性名。`object` 是要遍历的对象。
在循环的每次迭代中,`variable` 将被设置为对象的一个属性名。你可以使用这个属性名来访问对象的属性值,并执行相应的操作。
下面是一个使用 `for...in` 的简单示例:
```javascript
const obj = { a: 1, b: 2, c: 3 };
for (let key in obj) {
console.log(key); // 输出属性名
console.log(obj[key]); // 输出属性值
}
```
在上面的示例中,循环将遍历 `obj` 的每个属性,并输出属性名和属性值。
需要注意的是,`for...in` 循环不仅会遍历对象自身的可枚举属性,还会遍历对象原型链上的可枚举属性。如果只想遍历对象自身的属性,可以使用 `hasOwnProperty()` 方法进行过滤。例如:
```javascript
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
console.log(key); // 输出属性名
console.log(obj[key]); // 输出属性值
}
}
```
这样,只会遍历对象自身的属性,而不会包括继承的属性。
请注意,在使用 `for...in` 循环时,迭代顺序并不一定是属性在对象中的实际顺序。如果需要保持特定顺序,可以考虑使用 `Object.keys()` 方法获取对象的属性数组,并进行迭代。
阅读全文