RE: Re : Chybne pracujici js?

From: Martin Svarovsky (martin.svarovsky@ileo.cz)
Date: 12. 11. 2003, 16:33 CET


> Pokud v tagu SCRIPT nedefinujes LANGUAGE="JavaScript1.2", pak 
> samotna numericka hodnota definuje delku pole. Tolik aspon 
> rika dokumentace. Ted jsem to zkousel v IE 6 a presto to 
> nefunguje. Mozilla spravne vraci delku pole 1. Bez toho 
> parametru taky vraci hodnotu 5. Tohle funguje bez problemu:
> 
> pole = new Array();
> pole[0] = 5;
> alert(pole.length);
> 

Hele, to s tim 'language="JavaScript1.2"' se mi uplne nezda.
Varianta 1 argument=delka pole, vice argumentu=vycet hodnot podle
dokumentace plati od JavaScriptu 1.1 (JS 1.0 pole jeste neznal - ale to
je NN 2.0)
Jo, jasne, uz vim :)
Sorry, mel jsi pravdu - v NN i Moz. to tak je - ovsem jestli to je
"spravne" o tom se da polemizovat.

JavaScript 1.2 v Netscapu (NN 4.0 - 4.05) obsahoval totiz
nekompatibilitu s ECMAScriptem v.1 - neodpovidal tedy plne specifikaci.
Jednou z nekompatibilit bylo prave to chovani konstruktoru pole. Kdyz mu
predas jeden argument (x), vytvori nove pole o delce 1 s prvkem o
hodnote x. Verze JavaScript 1.3 (NN 4.06 - 4.8) uz ma tyto
nekompatibility opraveny.
Tohle chovani se zachovalo i u vsech vyssich verzi Netscapu - pokud mu
ovsem implicitne vnutite verzi Javascript1.2.
To ale urcite nikdo z vas nedela (ze ne?), protoze napr. MSIE NEPOUZIVA
Javascript 1.x, ale JScript x.x. Takze spolehat se na nekompatibilitu
nema smysl. Vsichni si tedy vesele piseme 'script
type="text/javascript"' a jsme vysmati jako leco.
---
Pokud ale bylo zamerem vytvorit co nejjednoduseji pole s jednim prvkem
naplnene nejakou hodnotou, pak se nabizi jeste uspornejsi zapis.
Jazykove verze JavaScript 1.2 (NN 4+) a JScript 3.0 (MSIE 4+)
implementuji totiz i literalovou syntaxi poli. Co to pro nas znamena? Ze
vytvorit i inicializovat pole lze jednim jednoduchym prikazem:

var pole=[5, 6, 7, 8]; --> pole se ctyrmi prvky
var pole=[5]; --> pole s jednim prvkem, hodnota 5.

Martin



This archive was generated by hypermail 2.1.3 : 12. 11. 2003, 16:33 CET