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?
En usko että onnistuu muuten kuin eval-funktion avulla.
var muuttuja1 = "arvo"; var muuttuja2 = "muuttuja1"; eval('alert(' + muuttuja2 + ');');
En ole oman lyhyen ohjelmointiurani aikana ikinä tarvinnut dynaamisia muuttujia. Yleensä taulukointi on paljon järkevämpi ratkaisu.
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...
Aihe on jo aika vanha, joten et voi enää vastata siihen.