Jonas Koch Bentzen <ingen.email@eksempel.dk> writes:
> Jeg vidste overhovedet ikke, JavaScript understøttede associative arrays
> (eller dictionaries eller hvad man nu kalder dem). Er det en del af
> ECMAScript-standarden?
Ja. Faktisk behøver det ikke være et array, det er en generel egenskab
ved objekter (arrays er også bare objekter).
Det er det samme at skrive
x.foo
og
x["foo"]
så det jeg skrev ovenfor var blot tilføjelsen af en attribut til
array-objektet. (Man kan kun bruge tal som indices med den anden
notation, altså x[0], men ikke x.0).
> Og findes der en måde at køre igennem dem i en løkke
> (ligesom foreach-løkken i PHP kan køre gennem et associativt array)?
Man kan bruge for-kommandoen:
for (var i in x) {
... x[i] ...
}
HUSK (fordi jeg glemmer det altid) at det er indices der bliver
gennemløbet, ikke indhold, så man skal huske at skrive x[i] for
at få værdien.
Det er ikke alle attributter ved et objekt der bliver enumereret
på den måde, men dem man selv har tilføjet gør. Hvis man starter
med et tomt objekt eller et tomt array, så skulle der ikke være
nogen attributter i fra start. Hvis man bruger DOM-objektet "window",
så er der mange i forvejen.
Det er kun når man indekserer med tal at array'ets length-attribut
bliver opdateret:
var x=[];
x["foo"]=4; // x.length==0
x[4]=4; // x.length==5
(Jeg har en javascript sandkasse at lege i på
<URL:
http://www.infimum.dk/HTML/jstest2.html>
(kræver dog en DHTML-browser der forstår Core DOM)
Hvis du kigger på den, så prøv at skrive
var x=[1];x["foo"]="bar";var y="";for(var i in x)y+=i+" ";y
i den øverste input-linje og tryk Evaluate. Så skulle der gerne stå
"0 foo " i output.
Prøv også at skrive "window" (uden anførselstegn) og tryk Examine, så
kan du se hvad der er af synlige attributter i window-elementet. Det
er sjovt at se hvordan det varierer mellem browsere hvilke attributter
der bliver enumereret).
/L
--
Lasse Reichstein Nielsen - lrn@brics.dk
Ph.D. i datalogi søger stilling som software-udvikler i Øst- eller
Nordjylland. Curriculum Vitae: <URL:
http://www.brics.dk/~lrn/cv.html>