ECMAScript alkuperäisarvot ja viittausarvot

ECMAScriptissä muuttujat voivat olla kahden tyyppien arvoja, nimittäin alkuperäisarvoja ja viittausarvoja.

Alkuperäisarvot ja viittausarvot

ECMAScriptissä muuttujat voivat olla kahden tyyppien arvoja, nimittäin alkuperäisarvoja ja viittausarvoja.

Alkuperäisarvo
Tallennettu pihlajassa olevassa yksinkertaisessa tietoympyrässä, eli niiden arvot tallennetaan suoraan muuttujan käsittelypaikkaan.
Viittausarvo
Tallennettu pihlajassa olevassa objektissa, eli arvo, joka tallennetaan muuttujaan, on osoitin (point), joka osoittaa tallennetun objektin muistipaikkaan.

Muuttujalle arvon asettamisen yhteydessä ECMAScriptin tulkki on määritettävä, onko arvo alkuperäismalli vai viittausmalli. Tämä voidaan tehdä, jos tulkki yrittää arvioidaOnko arvo ECMAScriptin alkuperäismallin yksieli Undefined, Null, Boolean, Number ja String. Koska nämä alkuperäismallit vievät vakion määrän tilaa, ne voidaan tallentaa pienempään muistialueeseen - pihlajaan. Tämä tallennus mahdollistaa nopean muuttujien arvojen etsinnän.

Monissa kielissä merkkijonot nähdään viittausmalleina eikä alkuperäismallina, koska merkkijonon pituus on muutettavissa. ECMAScript rikkoo tämän perinteen.

Jos arvo on viittausmalli, sen tallennustila varataan pihlajasta. Koska viittausarvon koko voi muuttua, sitä ei voida sijoittaa pihlajan tilaan, muuten se hidastaa muuttujien etsintävauhtia. Sen sijaan pihlajan tilassa oleva arvo on osoitin (point), joka osoittaa tallennetun objektin muistipaikkaan. Osoittimen koko on vakio, joten sen tallennus ei vaikuta mitenkään muuttujien suorituskykyyn. Kuten kuvassa näkyy:

Alkuperäiset ja viittausarvot, jotka tallennetaan pinoon ja talleen

Alkuperäismalli

Kuten edellä mainittiin, ECMAScriptillä on viisi alkuperäismallia (primitive type), nimittäin Undefined, Null, Boolean, Number ja String. ECMA-262 määrittää termiäTyyppi (type)Määritetty arvojen joukko, jossa jokaiselle alkuperäismallille määritetään sen sisältämien arvojen alue ja sen kirjaimellinen esitysmuoto.

ECMAScript tarjoaa typeof-laskurin arvoa arvioidakseen, onko arvo jossain tyyppirajoissa. Tämä laskin voidaan käyttää arvon tyyppimallin määrittämiseen: jos se on alkuperäismalli, voidaan myös määrittää, mikä alkuperäismalli se on.

Tarkemmin myöhemmin käsittelemme ECMAScriptin alkuperäisiä ja viittausmalleja.