/ Forside / Teknologi / Udvikling / Java Scripts / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
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

Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408941
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste