В чем разница между ... в и для каждого ... в Javascript? - PullRequest
6 голосов
/ 11 марта 2009

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

Ответы [ 4 ]

12 голосов
/ 11 марта 2009

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

Пример:

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

Источник

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

Пример:

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.

7 голосов
/ 11 марта 2009

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

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"
}
2 голосов
/ 11 марта 2009

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

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

2 голосов
/ 11 марта 2009

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

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

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

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

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

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

...