Autor Zpráva
Rihl278
Profil *
Dobrý den,
nevím jestli se to tady už probíralo ale...
Potřebuji poradit s automitickým generování proměnných.
Myslím tím třeba toto:
var x1=1
var x2=2
var x3=3
ale abych to nemusel takto vypisovat.(Samozřejmě že ne zrovna tohle-toto je úplně nepotřebné)Zkoušel jsem to s konstrukcí
var y = 0
while (y<10) {
document.write("var x"+y+"="+y+")
y++
document.write("alert(\"x"+y+"\")")
}
nebo podobně ale pokažé se nic nestalo.
Ne,opravdu nejsem na hlavu.Pokud víte jak na to,nebo jestli existuje něco v PHP a v podobných jazycích,poraďte mi.

Za hloupý nápad se omlouvám,je mi jen 12.
Radek9
Profil
Rihl278:
var x1=1
var x2=2
var x3=3
Fuj! Četl jsi něco o polích?

var x = Array();
for(i=0;i<10;i++){
  x[i] = i;
}

document.write("var x"+y+"="+y+")
document.write takhle nefunguje, pouze to vypíše.
Johnik
Profil
Uloz si to do pole:

var x = new Array();
var y = 0;
while (y < 10)
{ 
x.push(y++);
}
Rihl278
Profil *
Tak dík.Nojono mám jenom základy.Využiju.
Rihl278
Profil *
A když chci místo čísel použít řetězec???
Radek9
Profil
Rihl278:
Pole může mít v obsahu číslo, řetězec, další pole, objekt atd. V indexu řetězec, nebo číslo.
var x = new Array(0);
x[1] = 1;
x["dvě"] = "dvě";
x["tři"] = new Array("čtyři", 5, ["šest", 7]);
…
ah01
Profil
Radek9:
Pole může mít... V indexu řetězec
Jenže to už pak není pole, ale obecný objekt.
Radek9
Profil
ah01:
To je možné, ale v JS se dá zacházet s objektem (skoro) stejně jako s polem, takže v tom nevidím problém.
ah01
Profil
Radek9:
To „skoro“ je ale dost podstatné, viz např.: Délka pole
Witiko
Profil
Radek9:
To je možné, ale v JS se dá zacházet s objektem (skoro) stejně jako s polem, takže v tom nevidím problém.

Já pak naopak nevidím důvod proč používat pole. Můžeš si místo toho vytvořit jednoduchý objekt a nebudeš tam mít další funkce a vlastnosti objektu Array, které tě jen budou trápit při získávání obsahu pole pomocí for(variable in object) smyčky. Aktuálně sice prohlížeče většinově do jisté míry "vnitřnosti" Array objektu v for() smyčce kryjí, nicméně stále je tu .length atribut, který se jednoduše při přiřazování atributů instanci objektu Array nemění.

Problém následujícího zápisu:

var x = new Array(0);
x[1] = 1;
x["dvě"] = "dvě";
x["tři"] = new Array("čtyři", 5, ["šest", 7]);


je v tom, že x.length == 1 a dvě a tři jsou vlastnosti, které lepíš natvrdo na objekt, kterým Array v javascriptu je. To beru celkově jako mínus už jenom kvůli tomu, že se dá jeho integrita jednoduše narušit a zároveň se na něj aplikují pravidla objektů, takže například [] == [] navrací false, protože každé z polí je jiná instance objektu Array. Celkově bych ocenil lepší integraci polí přímo do jazyka, aktuální implementace by se dala až na pár klíčových slov a hranaté závorky jednoduše nahradit vlastním Array frameworkem.

Proto pokud cítíš potřebu mít název pole jako textový řetězec, doporučuji spíše tento zápis:

var x = new Object();
x["jedna"] = 1;
x["dvě"] = "dvě";
x["tři"] = new Array("čtyři", 5, ["šest", 7]);


Je pravda, že u Objektu není možné mít názvy vlastností začínající číslicí, nicméně pokud člověk skutečně někde potřebuje přiřazovat polím jak číselný index, tak textový, měl by se raději zamyslet, jestli by nešel daný zápis napsat jinak a lépe a ne využívat chabé implementace polí v javascriptu, které dovolují uživateli pracovat s instancí Array jako s jakýmkoliv jiným objektem.
_es
Profil
Witiko:
Je pravda, že u Objektu není možné mít názvy vlastností začínající číslicí
Nie je to pravda.
Tento kód bez problémov funguje:
var x= new Object();
x[8] = "nejaký text";
alert(x[8]);
Číslo 8 je vždy automaticky prevedené na text.
V kóde bola vytvorená a čítaná vlastnosť s názvom "8".
DoubleThink
Profil *
Witiko:
Celkově bych ocenil lepší integraci polí přímo do jazyka
Tím bys udělal víc škody než užitku. Jak taková "integrace" vypadá, můžeme ostatně vidět v PHP.
Witiko
Profil
_es:
Nie je to pravda.

Pravda to je, dojde k přetypování, stejně jako u definice proměnné:

var 8 = "obsah";
object.8 ="obsah";


Obojí vyhodí chybu. [] zápis se používá pro definici názvu prvku, ten je pokud vím vždy řetězcové podstaty.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: