Problem mit For-Each Scheife in einigen Browsern
thief1064
- javascript
Hallo Leute,
ich habe folgendes Problem:
function getHttpGet() {
var url = location.search.substring(1, location.search.length)
array = url.split('&')
var getVars = new Array();
for each(var item in array) {
var temp = item.split('=');
getVars[temp[0]] = temp[1];
}
return getVars;
}
Dieser Code funktioniert. Jedoch nur im Firefox (3) und IE (6).
Ich habe das Script desweiteren mit Safari (aktuellste Version) und Opera
9.26 getestet und diese weigern sich das Script auszuführen.
Ich denke es liegt an der For-Each Schleife. Änder ich die Schleife in eine For-In, so wird das Script zwar ausgeführt, liefert aber als Rückgabewert undefined bzw ein kaputtes Array.
for (var item in array) {
var temp = item.split('=');
getVars[temp[0]] = temp[1];
}
Sinn des Scripts ist es, die GET-Variablen aus der URL zu lesen und in ein
Assoziatives Array zu speichern.
Hat jemand eine Idee, wie ich das Script für alle gängigen Browser anpassen kann?
Danke im vorraus.
Hat jemand eine Idee, wie ich das Script für alle gängigen Browser anpassen kann?
wie wärs mit einer altbekannten for(;;) Schleife?
for(var i=0; i < some_array.length; i++)
{
// mach was mit some_array[i]
}
mfg Beat
Danke. Hätte ich eigendlich auch selbst drauf kommen können. :)
Sinn des Scripts ist es, die GET-Variablen aus der URL zu lesen und in ein
Assoziatives Array zu speichern.
Dazu müssen die Werte noch dekodiert werden. Hier ein Beispiel.
Struppi.
Hallo,
for each(var item in array) {
Wo hast du das her? So ein Konstrukt gibt es in JavaScript nicht. Das ist eine proprietäre Erweiterung von Firefox, die derzeit meines Wissens auch nur Firefox unterstützt.
Dieser Code funktioniert. Jedoch nur im Firefox (3) und IE (6).
Das glaube ich nicht.
Ich habe das Script desweiteren mit Safari (aktuellste Version) und Opera
9.26 getestet und diese weigern sich das Script auszuführen.
Kein Wunder.
Ich denke es liegt an der For-Each Schleife. Änder ich die Schleife in eine For-In, so wird das Script zwar ausgeführt, liefert aber als Rückgabewert undefined bzw ein kaputtes Array.
for (var item in array) {
Anscheinend hast du den Unterschied zwischen for-each und for-in noch nicht verstanden. Sie sind nämlich nicht so austauschbar.
for-each durchläuft alle Member-Namen, for-in alle Member.
Das heißt:
for (var memberName in object) liefert in der Variablen memberName die Namen der Member als Strings
for each (var member in object) liefert in der Variable member die Member selbst
var temp = item.split('=');
item ist hier die Nummer des Arrayelements, nicht das Arrayelement selbst!
Es wird also ausgeführt:
"0".split('=')
"1".split('=')
"2".split('=')
...
Arrays kannst du durchaus mit for-in durchlaufen:
for (var number in array) {
var arrayElement = array[number];
// mach was mit arrayElement
}
Allerdings können einem bei dieser Schreibweise zusätzlich zu den Array-Elementen vererbte Member reinfummeln, also bleibt man besser bei der for-Schleife, die die Nummern iteriert.
Mathias
for-each durchläuft alle Member-Namen, for-in alle Member.
Nein, es ist umgekehrt! Ich Schussel.
Das heißt:
for (var memberName in object) liefert in der Variablen memberName die Namen der Member als Strings
for each (var member in object) liefert in der Variable member die Member selbst
Hier stimmts wieder...