Вопрос

В чем разница между операторами for..in и foreach..in в javascript?Есть ли тонкая разница, о которой я не знаю, или это одно и то же, и в каждом браузере для него разное имя?

Это было полезно?

Решение

"за каждого...в" перебирает указанную переменную все значения свойств указанного объекта.

Пример:

var sum = 0;
var obj = {prop1: 5, prop2: 13, prop3: 8};
for each (var item in obj) {
  sum += item;
}
print(sum); // prints "26", which is 5+13+8

Источник

"для... в" перебирает указанную переменную все объекты недвижимости объекта в произвольном порядке.

Пример:

function show_props(obj, objName) {
   var result = "";
   for (var i in obj) {
      result += objName + "." + i + " = " + obj[i] + "\n";
   }
   return result;
}

Источник


Примечание 03.2013, for each... in петли устарел.«Новый» синтаксис, рекомендованный MDN: for... of.

Другие советы

Надеемся, что эта демонстрация иллюстрирует разницу.

var myObj = {
    a : 'A',
    b : 'B',
    c : 'C'
};
for each (x in myObj) {
    alert(x);        // "A", "B", "C"
}
for (x in myObj) {
    alert(x);        // "a", "b", "c"
    alert(myObj[x]); // "A", "B", "C"
}

Прочитайте отличную документацию MDC.

первый предназначен для обычного использования зацикливание на коллекциях и произвольно на свойствах объекта.

  

Цикл for ... in не выполняет итерацию по встроенным свойствам. К ним относятся все встроенные методы объектов, такие как метод indexOf String или метод toString объекта. Однако цикл будет повторяться по всем пользовательским свойствам (включая любые, которые перезаписывают встроенные свойства).

     

Цикл for ... in выполняет итерацию по свойствам объекта в произвольном порядке. Если свойство изменяется за одну итерацию, а затем посещается позднее, значение, представленное циклом, будет его значением в это более позднее время. Свойство, которое было удалено до того, как оно было посещено, не будет посещено позже. Свойства, добавленные к объекту, по которому происходит итерация, могут быть либо посещены, либо пропущены в итерации. Как правило, лучше не добавлять, не изменять и не удалять свойства объекта во время итерации, кроме свойства, которое в данный момент посещается; нет никакой гарантии, будет ли посещено добавленное свойство, будет ли измененное свойство посещено до или после его изменения, или будет ли удаленное свойство посещено до того, как оно будет удалено.

последний позволяет зацикливаться свойства объекта.

  

Итерирует указанную переменную по всем значениям свойств объекта. Для каждого отдельного свойства выполняется указанный оператор.

В дополнение к другим ответам имейте в виду, что для каждого ... in не является частью стандарта ECMA и также не включен в предстоящее издание 3.1 . Он был представлен в JavaScript 1.6, который является расширением ECMAScript3 , разработанным Mozilla Foundation.

Согласно связанной странице Википедии, она реализована только в Firefox 1.5+ и Safari 3.x (+?).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top