Domanda

Qual è la differenza tra istruzioni for..in e per each..in in javascript? Ci sono sottili differenze che non conosco o è la stessa e ogni browser ha un nome diverso per questo?

È stato utile?

Soluzione

" per ogni ... in " scorre una variabile specificata su tutti i valori delle proprietà dell'oggetto specificato.

Esempio:

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

" per ... in " itera una variabile specificata su tutte le proprietà di un oggetto, in ordine arbitrario.

Esempio:

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

Source


Nota 03.2013, per ogni ... in i cicli sono obsoleto . La "nuova" sintassi consigliata da MDN è < codice> per ... di .

Altri suggerimenti

Speriamo che questa dimostrazione illustri la differenza.

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"
}

Leggi l'eccellente documentazione MDC.

Il first è normale passare in rassegna le raccolte e arbitrariamente le proprietà di un oggetto.

  

Un ciclo for ... in non scorre le proprietà incorporate. Questi includono tutti i metodi incorporati di oggetti, come il metodo indexOf di String o il metodo toString di Object. Tuttavia, il ciclo eseguirà l'iterazione su tutte le proprietà definite dall'utente (comprese quelle che sovrascrivono le proprietà integrate).

     

Un ciclo for ... in itera le proprietà di un oggetto in un ordine arbitrario. Se una proprietà viene modificata in una iterazione e quindi visitata in un secondo momento, il valore esposto dal loop sarà il suo valore in quel momento successivo. Una proprietà che viene eliminata prima di essere visitata non verrà visitata in seguito. Le proprietà aggiunte all'oggetto su cui si sta verificando l'iterazione possono essere visitate o omesse dall'iterazione. In generale, è meglio non aggiungere, modificare o rimuovere proprietà dall'oggetto durante l'iterazione, tranne la proprietà attualmente visitata; non è garantito se una proprietà aggiunta verrà visitata o meno, se una proprietà modificata verrà visitata prima o dopo la modifica o se una proprietà eliminata verrà visitata prima che venga eliminata.

Il second ti consente di passare in rassegna proprietà di un oggetto.

  

Itera una variabile specificata su tutti i valori delle proprietà dell'oggetto. Per ogni proprietà distinta, viene eseguita un'istruzione specificata.

Oltre alle altre risposte, tieni presente che per ogni ... in non fa parte dello standard ECMA e non è incluso in prossima edizione 3.1 . È stato introdotto in JavaScript 1.6, che è una estensione di ECMAScript3 della Mozilla Foundation.

Secondo la pagina Wikipedia collegata, è implementato solo in Firefox 1.5+ e Safari 3.x (+?).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top