2009-03-11 3 views
6

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

+0

Это не рекомендуется [В чем разница между 'for ... in' и' for ... of' в javascript?] (Http://stackoverflow.com/q/29285897/1048572) – Bergi

ответ

12

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

Пример:

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 

Source

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

Пример:

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

Source


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

+0

Является ли этот браузер конкретным? –

+0

@Vijay: да - он был введен в JavaScript 1.6, то есть расширение Mozilla – Christoph

2

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

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

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

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

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

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

7

Эта демонстрация, надеюсь, иллюстрирует разницу.

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

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

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

+0

Другими словами, это только «Firefox». –