2012-03-02 3 views
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, в нем нет свойства, почему?in-in and in of JS

+0

это работает для меня – mgraph

ответ

7

исх: https://developer.mozilla.org/en/JavaScript/Reference/Statements/for...in

А при ... в цикле не перебрать, не перечислимых свойств. Объекты, созданные из встроенных конструкторов, таких как Array и Object, имеют унаследованные неперечислимые свойства Object.prototype и String.prototype, которые не перечислены, например метод String indexOf или метод toString объекта. Петля будет перебирать все перечислимые свойства объекта или что он наследует от своего прототипа конструктора (включая любые, которые перезаписывают встроенные свойства ).

1

Некоторые свойства перечислены, некоторые - нет, поэтому вы не увидите их в цикле for-in.

4

Это потому, что for...in только итерации свыше перечислимые свойства своей цели. Перечислимость - это атрибут, который свойства могут иметь или не иметь (наряду с возможностью записи и конфигурируемости); те, у кого его нет, не будут выставлены for...in, хотя они, конечно, все еще существуют на объекте.

MDN говорит, что это для for...in:

А при ... в цикле не перебрать, не перечислимых свойств. Объекты, созданные из встроенных конструкторов, таких как Array и Object, имеют унаследованные неперечислимые свойства Object.prototype и String.prototype, которые не перечислены, например метод String indexOf или метод toString объекта. Петля будет перебирать все перечислимые свойства объекта или что он наследует от своего прототипа конструктора (включая любые, которые перезаписывают встроенные свойства ).

С другой стороны, in не принимает во внимание перечислимости и поэтому возвращает true если свойство существует без дальнейшего обсуждения.

0

сделать

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

for..in не itererate они, как вы ожидаете. prop - это индекс, и цикл выполняется для каждого элемента в result.

это то же самое, как for(var i =0;i<result.length;i++)

0

для ... всего лишь членов объекта перечисления