Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: JavaScript: Dynaamiset muuttujat JavaScriptillä?

puavo [05.05.2007 11:01:04]

#

Onko JavaScriptillä mahdollista käyttää dynaamisia muuttujia samaan tapaan kuin php:lla? Php:llähän se onnistuu näin:

<?php
$muuttuja1 = "arvo";
$muuttuja2 = "muuttuja1";
echo $$muuttuja2; // tulostaa: arvo
?>

Siis onnistuuko vastaava JavaScriptillä, ja jos onnistuu, niin miten?

Olga [05.05.2007 14:12:04]

#

En usko että onnistuu muuten kuin eval-funktion avulla.

var muuttuja1 = "arvo";
var muuttuja2 = "muuttuja1";
eval('alert(' + muuttuja2 + ');');

ajv [05.05.2007 16:30:59]

#

En ole oman lyhyen ohjelmointiurani aikana ikinä tarvinnut dynaamisia muuttujia. Yleensä taulukointi on paljon järkevämpi ratkaisu.

Pekka Karjalainen [06.05.2007 11:01:03]

#

Mihin tahansa objektiin voi lykätä tietoa ja hakea sitä sekä .-notaatiolla, että []-notaatiolla.

Vaikkapa näin, missä []-merkkejä voi käyttää suoraan tai muuttujan kautta.

tietoa = {makkara : "hyvää"};
alert (tietoa.makkara);
alert {tietoa["makkara"]);
haluttu_kentta = "makkara";
alert (tietoa[haluttu_kentta]);

Ensimmäisen rivin merkintä on objektin alustuslauseke. Voisi myös sanoa:

tietoa = new Object();
tietoa["makkara"] = "hyvää";

Tämä olisi vastaava alustus, mutta pitemmästi kirjoitettuna. Huomaa, että alustusmerkinnässä avainmerkkijonon voi esittää ilman lainausmerkkjeä, kuten yllä tehtiin, mutta muutoin se ei toimi. Useammat avain-arvo-parit {}-merkinnässä erotetaan pilkuilla.

JS:n objekteja voi käyttää myös aika mukavasti nimiavaruuksina.

oma_avaruus = {kivafunktio: function (x,y) { return x + y ; }}

Normaalista funktiomäärittelystä poiketen funktion nimi on nyt tuossa vasemmalla avainarvona. Tuota voisi siis kutsua yo. esimerkkien tapaisilla viittauksilla, vaikkapa oma_avaruus.kivafunktio(3,5).

Testasin esimerkkejäni Firefoxin JS-konsolissa. Siirrettävyydestä en voi luvata mitään, mutta pitäisi kelvata muuallakin...

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta