2
var result = function(){}
console.log("constructor" in result);//true
console.log("__proto__" in result);//true
console.log("prototype" in result);//true

for (var prop in result) {
   console.log(prop); // no output!!
}

当我in用于确定结果中的属性时,它返回 true;但是当我使用时for-in,结果中没有属性,为什么?

4

5 回答 5

7

参考: https ://developer.mozilla.org/en/JavaScript/Reference/Statements/for...in

for...in 循环不会迭代不可枚举的属性。从 Array 和 Object 等内置构造函数创建的对象从 Object.prototype 和 String.prototype 继承了不可枚举的不可枚举属性,例如 String 的 indexOf 方法或 Object 的 toString 方法。循环将遍历对象的所有可枚举属性,或者它从其构造函数的 proptotype 继承(包括任何覆盖内置属性的属性)。

于 2012-03-02T09:03:05.443 回答
4

那是因为for...in仅迭代其目标的可枚举属性。可枚举性是属性可能具有或不具有的属性(以及可写性和可配置性);那些没有它的将不会被暴露,for...in即使它们当然仍然存在于对象上。

MDN这么说for...in

for...in 循环不会迭代不可枚举的属性。从 Array 和 Object 等内置构造函数创建的对象从 Object.prototype 和 String.prototype 继承了不可枚举的不可枚举属性,例如 String 的 indexOf 方法或 Object 的 toString 方法。循环将遍历对象的所有可枚举属性,或者它从其构造函数的 proptotype 继承(包括任何覆盖内置属性的属性)。

另一方面,in不考虑可枚举性,因此true如果属性存在而无需进一步考虑就返回。

于 2012-03-02T09:04:03.663 回答
1

有些属性是 enumerables ,有些不是,所以你不会在 for-in 循环中看到它们。

于 2012-03-02T09:03:33.413 回答
0

for (var prop in result) {
  console.log(result[prop]); // no output!!
 }

for..in不会以您期望的方式迭代它们。prop是索引,循环针对 . 中的每个元素运行result

它与 for(var i =0;i<result.length;i++)

于 2013-06-27T05:50:08.493 回答
0

for ... 仅在枚举对象成员中

于 2013-12-12T03:07:17.500 回答