|
| var Fra : Jonas Koch Bentzen |
Dato : 26-01-03 22:24 |
|
Efter at have set ECMAScript-standarden igennem er det lidt uklart for mig,
hvorvidt det er påkrævet at skrive "var" ved variabeldeklarationer - altså,
om man skal skrive
var navn = "Hans"
eller bare
navn = "Hans"
Begge dele virker i de fleste browsere, men der er visse forskelle. F.eks.
har jeg bemærket, at hvis man bruger IE og der på siden er et HTML-element,
der f.eks. har ID'et "liste", så vil "liste" automatisk være tilgængelig
som et objekt (røvirriterende). Det gør så, at følgende vil give en fejl:
liste = document.getElementById("liste")
Til gengæld virker det fint, hvis man gør følgende:
var liste = document.getElementById("liste")
Er det korrekt opførsel af IE, at den automatisk gør ID'er på siden til
objekter? Og er "var" påkrævet ved variabeldeklarationer?
--
Jonas Koch Bentzen
| |
Lasse Reichstein Nie~ (27-01-2003)
| Kommentar Fra : Lasse Reichstein Nie~ |
Dato : 27-01-03 00:03 |
|
Jonas Koch Bentzen <ingen.email@eksempel.dk> writes:
> Efter at have set ECMAScript-standarden igennem er det lidt uklart for mig,
> hvorvidt det er påkrævet at skrive "var" ved variabeldeklarationer - altså,
> om man skal skrive
>
> var navn = "Hans"
>
> eller bare
>
> navn = "Hans"
Det første er en variabeldeklaration. Det andet er blot en assignment til
en (måske allerede eksisterende) variabel.
> Det gør så, at følgende vil give en fejl:
>
> liste = document.getElementById("liste")
>
> Til gengæld virker det fint, hvis man gør følgende:
>
> var liste = document.getElementById("liste")
Den sidste skal også virke. Deklarationen giver en ny variabel med
navnet "liste" som overskygger tidligere definerede variabler,
funktioner og attributter med samme navn.
Den første forsøger at finde en allerede eksisterende identifer der
hedder "liste". I ECMA-script findes den ved at tjekke
variabel-objektet for scopet og følge scope-kæden bagud. Hvis der
virkelig ikke er noget der hedder "liste" i forvejen, så bliver der
oprettet en ny reference med indhold "undefined" og som tilhører
null-objektet (ECMA-Script-definitionen, 10.1.4).
> Er det korrekt opførsel af IE, at den automatisk gør ID'er på siden til
> objekter?
Nej. IE lader elementer med id="foo" være adresserbare som
document.foo. Der er i hvert fald ikke noget i DOM-specifikationen der
siger at de skal være tilgængelige på den måde, og der er *rigtigt* mange
mennesker der skriver kode på den måde. Det virker så i IE, og ikke andre
browsere.
Det er ikke direkte forkert, det er blot heller ikke standard. Det er
også en dum måde at gøre det på, da man ikke kan bruge document.<foo>
konsekvent. F.eks. kan man nok ikke få fat i elementer med id'erne
"all" og "body".
> Og er "var" påkrævet ved variabeldeklarationer?
Ja, det er det der er en variabeldeklaration. Hvis du blot skriver
foo = "bar";
så regner nogle browseres javascript (så vidt jeg kan se) med at foo
er en attribut i window-objektet. Prøv følgende kode i en Netscape,
Mozilla eller Opera:
foo="bar";
alert(window.foo);
Jeg ved ikke hvad IE gør, men måske det rigtige.
/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
'Faith without judgement merely degrades the spirit divine.'
| |
Jonas Koch Bentzen (27-01-2003)
| Kommentar Fra : Jonas Koch Bentzen |
Dato : 27-01-03 10:36 |
|
Lasse Reichstein Nielsen wrote:
> Jonas Koch Bentzen <ingen.email@eksempel.dk> writes:
>
>> Efter at have set ECMAScript-standarden igennem er det lidt uklart for
>> mig, hvorvidt det er påkrævet at skrive "var" ved variabeldeklarationer -
>> altså, om man skal skrive
>>
>> var navn = "Hans"
>>
>> eller bare
>>
>> navn = "Hans"
>
> Det første er en variabeldeklaration. Det andet er blot en assignment til
> en (måske allerede eksisterende) variabel.
Mange tak for svaret.
--
Jonas Koch Bentzen
| |
|
|