Для в и в JS
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
для определения, если свойство в результате, он возвращает истину; Но когда я использую for-in
, нет результата в результате, почему?
5 ответов
Ссылка: https://developer.mozilla.org/en/JavaScript/Reference/Statements/for...in
Цикл for... in не выполняет итерацию по неперечислимым свойствам. Объекты, созданные из встроенных конструкторов, таких как Array и Object, унаследовали неперечислимые свойства от Object.prototype и String.prototype, которые не перечисляются, такие как метод indexOf в String или метод toString в Object. Цикл будет перебирать все перечисляемые свойства объекта или то, что он наследует от прототипа своего конструктора (включая любые, которые перезаписывают встроенные свойства).
Это потому for...in
перебирает только перечисляемые свойства своей цели. Перечислимость - это атрибут, который свойства могут иметь или не иметь (наряду с возможностью записи и конфигурирования); те, у кого его нет, не будут for...in
хотя они, конечно, все еще существуют на объекте.
MDN говорит это для for...in
:
Цикл for... in не выполняет итерацию по неперечислимым свойствам. Объекты, созданные из встроенных конструкторов, таких как Array и Object, унаследовали неперечислимые свойства от Object.prototype и String.prototype, которые не перечисляются, такие как метод indexOf в String или метод toString в Object. Цикл будет перебирать все перечисляемые свойства объекта или то, что он наследует от прототипа своего конструктора (включая любые, которые перезаписывают встроенные свойства).
С другой стороны, in
не учитывает перечислимость и поэтому возвращает true
если собственность существует без дальнейшего обсуждения.
Некоторые свойства являются перечислимыми, некоторые нет, поэтому вы не увидите их в цикле for-in.
Делать
for (var prop in result) {
console.log(result[prop]); // no output!!
}
for..in
не повторять они так, как вы ожидаете. prop
является индексом, и цикл выполняется для каждого элемента в result
,
это так же, какfor(var i =0;i<result.length;i++)