• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] Problem mit Array

DerMicha

New member
Hallo miteinander,

also PHP ist kein Problem, aber Javascript schafft mich.

Folgendes Problem.

Code:
var status = [0, 0, 0, 0, ......]

Ist ein Array mit 17 Werten die 0 sind. Fragt nicht wozu, das brauch ich so.

Nun wenn ich auf die Arrayelemente zugreifen will geschieht folgendes. Bei einem geraden Index (0, 2, 4 usw.) bekomme ich 0.
Bei ungeraden (1, 3, 5 usw.) bekomme ich ein Komma.

Dazu sagt Array.length 33, was stimmt wenn man die Kommas mitzählt. Aber das ist doch nicht sinn und zweck der Sache. Vielleicht kann mir ja jemand verraten, wo mein Fehler liegt.
 
Dazu braucht es gar keinen weiteren Code, sondern nur eine Ausgabe.

Code:
var status = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
document.write(status[1]);

Ich benötige halt 17 Werte, die natürlich im weiteren Programmablauf dann geändert werden. Statt Nullen die zu Einsen werden, ginge auch false was zu true wird. Da bekomme ich dann aber die einzelnen Buchstaben f,a,l,s,e angezeigt und auch die Kommas.

Hab auch schon
Code:
var status = new Array(0,0,0,....);
probiert. Gleiches Ergebnis.

Und wieso ist length 33 und mit dem Index 32 bekomme ich auch eine 0? Das Array sollte doch nur die Länge 17 haben. Ist ja kein String, wird aber irgendwie so behandelt.
 
Keine Ahnung, was du da treibst, bei mir funktioniert das wie erwartet.
Bitte mit F12 die Console öffnen und dann das HTML hier im Browser aufrufen:
HTML:
<!DOCTYPE html>
<html>
<head>
<title>für DerMicha</title>
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
</head>
<body>

<script>
var status = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
alert(status.length);
for (var i=0; i<status.length; i++) {console.log(i+' = '+status[i]);}
</script>

</body>
</html>
 
Das mit dem status wusste ich nicht. Wenn ich das Array aber in eine Funktion lege funktioniert es auch. Anderer Namensraum und daher ist status wohl wieder verwendbar. Werde es aber nochmal mit einem anderen Namen außerhalb der Funktion testen, denn das Array sollte doch von mehreren Funktionen ansprechbar sein.
 
Hey DerMicha,

also ich hab da ein ähnliches problem gehabt kürzlich mit meinem script.

ich hab ein array gehabt mit mehreren inhalten aber jedesmal mir nur 0 ausgegeben....

stadt = array(berlin,hamburg,leipzig);

normal müsste er mir folgendes ausgeben:

stadt[1] // berlin
stadt[2] // hamburg
stadt[3] // leipzig

und bei dem befehl: nr = stadt.length; mir ausgeben wieviele städte in diesem array sind. hat aber auch nur 0 angezeigt.

ich hab dann

stadt = stadt.split(',');

eingefügt und dann kam ich zu meinem ergebnis...

stadt[1] // berlin
stadt[2] // hamburg
stadt[3] // leipzig


... oder via for() dann anzeigen lassen.

mfg
-LA-
 
stadt = array(berlin,hamburg,leipzig);
das war dein code?
Array, nicht array, schöner meiner meinung nach stadt = new Array(berlin,hamburg,leipzig);, du willst ja nicht casten, sondern ein neues objekt erzeugen, auch wenn inhaltlich das selbe rauskommt.
die variablen berlin,hamburg und leipzig existieren bei dir?
 
Ich verstehe nicht, welche Probleme ihr da habt. Aber bis jetzt hat von euch auch keiner ein vollständiges und lauffähiges HTML Dokument gezeigt, wo man den Fehler mit reproduzieren kann. Deshalb kann man zu den Gründen schlecht was sagen.
 
mikdoe schrieb:
Sempervivum, wieso funktioniert dann mein Code?
Gute Frage, das kann ich mir nicht erklären. Um den Fehler zu untersuchen, habe ich genau deinen Code verwendet und damit trat genau das Fehlverhalten auf, das der TO beschrieb. Vielleicht, dass sich die JS-Interpreter verschiedener Browser unterschiedlich verhalten? Ich verwende FF.
 
"status" ist ein reserviertes Wort in Javascript:
Ist nicht reserviert, sondern eine globale Variable, die nur einen String enthalten kann. Wieder ein Fall von: globale Variablen sind schlecht.


Bitte nicht. Der Array-Konstruktor hat keine Vorteile, nur eine Inkonsistenz und damit Nachteil. Auch ist er im Stackoverflow-Code nicht nötig:
Code:
var foo = [];
for (var i = 0; i < 17; i += 1){
	foo[i] = i;
}
- kürzer und genauso schnell.

schöner meiner meinung nach
Also ich finde stadt = [berlin,hamburg,leipzig]; schöner, kürzer und vermeidet den inkonsistenten Array-Konstruktor.


@LA1984: um das Problem mit deinem Code zu erklären müsste man das komplette Umfeld kennen.

Aber bis jetzt hat von euch auch keiner ein vollständiges und lauffähiges HTML Dokument gezeigt, wo man den Fehler mit reproduzieren kann.
Lass deinen Code mal im FF laufen. Der IE verhält sich da anders - nicht W3C-konform, wie immer. window.status ist einfach der Text, der in der Statuszeile steht und das kann nur ein String sein.
 
Bitte nicht. Der Array-Konstruktor hat keine Vorteile, nur eine Inkonsistenz und damit Nachteil. Auch ist er im Stackoverflow-Code nicht nötig:
Code:
var foo = [];
for (var i = 0; i < 17; i += 1){
	foo[i] = i;
}
- kürzer und genauso schnell.
Ja, ich weise sonst selbst darauf hin, aber hier wollte ich eine Lösung zeigen, die so kurz wie möglich ist...
 
Bitte nicht. Der Array-Konstruktor hat keine Vorteile, nur eine Inkonsistenz und damit Nachteil.
er funktioniert so wie er soll und defienier ist, das ist kein nachteil

Also ich finde stadt = [berlin,hamburg,leipzig]; schöner, kürzer
ich auch, darum ging es mir aber nicht

und vermeidet den inkonsistenten Array-Konstruktor.
der Array-Konstruktor ist nicht inkonsistent, sondern konsistent zu seiner definition.

Lass deinen Code mal im FF laufen. Der IE verhält sich da anders - nicht W3C-konform, wie immer.
dann müsste window.status als readonly definiert sein.

window.status ist einfach der Text, der in der Statuszeile steht und das kann nur ein String sein.
oder definiert sein, dass window.status nur text enthalten DARF
 
konsistent zu seiner definition
Die Definition/Spezifikation ist inkonsistient - macht das Ganze nicht besser.
dann müsste window.status als readonly definiert sein
Das ist falsch: http://www.w3.org/TR/html51/browsers.html#the-window-object
oder definiert sein, dass window.status nur text enthalten DARF
Genau so ist er definiert - siehe Link oben.

- - - Aktualisiert - - -

@Julian: Kürzer wird's dadurch auch nicht, da du den Array trotzdem noch initialisieren/befüllen musst.
 
würde ich nicht so sagen, die definition macht durchaus sinn
Ich hab' nicht gesagt, dass es keinen Sinn ergibt, einen Array bin einer vordefinierten Größe zu machen, sondern dass der Konstruktor inkonsistent ist. So ist nicht vorhersehbar, was dieses Konstrukt genau macht:
Code:
var arr = new Array(b);
 
Zurück
Oben