ECMAScript-tyyppimuunnokset
- Edellinen sivu ECMAScript-alkuperäiset tyypit
- Seuraava sivu ECMAScript-referenssityypit
Kaikkein tärkeimmistä ohjelmointikielen ominaisuuksista on kyky suorittaa tyyppimuunnoksia.
ECMAScript tarjoaa kehittäjille suuren määrän yksinkertaisia tyyppimuunnosmenetelmiä.
Suurin osa tyyppien on menetelmiä, jotka suorittavat yksinkertaisen muuntamisen, ja muutama globaali menetelmä voidaan käyttää monimutkaisempien muuntamisten suorittamiseen. Joka tapauksessa ECMAScriptissä tyyppimuunnokset ovat lyhyt askel.
Muunna merkkijonoksi
ECMAScript-alkuperäisten Boolean-arvojen, numerojen ja merkkijonojen mielenkiintoisia ominaisuuksia ovat ne, että ne ovat syytöksiä, mikä tarkoittaa, että ne ovat todellisuudessa omaisia ja menetelmiä.
Esimerkiksi, jos haluat saada merkkijonon pituuden, voit käyttää seuraavaa koodia:
var sColor = "red"; alert(sColor.length); // Tulostaa "3"
Vaikka "red" on alkuperäinen merkkijonotyyppi, sillä on edelleen ominaisuus length, joka tallentaa merkkijonon kokonaisuuden.
Yhteenvetona, kolme pääasiallista alkuperäistä tyyppiä Boolean-arvot, numerot ja merkkijonot ovat toString() -menetelmän omaisia, ja niiden arvot voidaan muuntaa merkkijonoksi.
Vinkki:Olet ehkä kysynyt, "Onko merkkijonolle myös toString() -menetelmä, eikö se ole tarpeetonta?" Kyllä, se on totta, mutta ECMAScript määrittelee, että kaikki objektit, olivatpa ne syytöksiä tai todellisia objekteja, ovat toString() -menetelmän omaisia. Koska String-tyyppi kuuluu syytöksiin, sillä on myös toString() -menetelmä.
Boolean-tyypin toString() metodi tulostaa vain "true" tai "false", tuloksen määrittää muuttujan arvo:
var bFound = false; alert(bFound.toString()); // Tulostaa "false"
Number-tyypin toString() metodi on erityinen, sillä sillä on kaksi tilaa, nimittäinOletusmuotojaPerusmuoto。Oletusmuodossa toString() metodi tulostaa vain vastaavan merkkijonon lukuarvon (olipa se kokonaisluku, desimaaliluku tai tieteellinen muoto), kuten seuraavassa näkyy:
var iNum1 = 10; var iNum2 = 10.0; alert(iNum1.toString()); // Tulostaa "10" alert(iNum2.toString()); // Tulostaa "10"
Huomautus:Oletusmuodossa, riippumatta siitä, millä muodolla luku alun perin ilmoitetaan, Number-tyypin toString() metodi palauttaa aina luvun kymmenen muodon.
Käyttämällä Number-tyypin toString() metodin perusmuotoa voidaan käyttää eriPerustaTulosta luku, esimerkiksi binäärin perusta on 2, oktaalin perusta on 8, heksadesimaalin perusta on 16.
PerustaSe on vain toinen tapa muuntaa eri perustana, joka on toString() metodin parametri:
var iNum = 10; alert(iNum.toString(2)); // Tulostaa "1010" alert(iNum.toString(8)); // Tulostaa "12" alert(iNum.toString(16)); // Tulostaa "A"
Aiemmassa esimerkissä numero 10 kirjoitettiin kolmella eri tavalla, binäärimuodossa, oktaalimuodossa ja heksadesimaalimuodossa. HTML käyttää heksadesimaalista muotoa värejä esittämiseen, mikä on erittäin hyödyllistä HTML:n käsittelyssä.
Huomautus:Kutsuun toString(10) ja toString() on sama, ne palauttavat molemmat luvun kymmenen muodossa.
Katso:
Katso JavaScript viittausopasTarjoa tarkempia tietoja toString() metodista:
Muunna numeroon
ECMAScript tarjoaa kaksi tapaa muuntaa ei-numeriset alkuperäisarvot numeroiksi, nimittäin parseInt() ja parseFloat().
Kuten ehkä odotat, ensimmäinen muuntaa arvon kokonaisluvuksi, toinen taas muuntaa arvon liukuluvuudeksi. Näitä menetelmiä voidaan käyttää vain String-tyypille, muissa tyyppien tapauksessa palautetaan NaN.
parseInt()
Ennen kuin parseInt() ja parseFloat() tarkistavat, onko merkkijono numeroarvo, ne analysoivat huolellisesti kyseisen merkkijonon.
parseInt() -menetelmä tarkistaa ensin merkki 0: ssä, onko se kelvollinen numero; jos ei, menetelmä palauttaa NaN ja ei jatka muita toimintoja. Jos merkki on kelvollinen numero, menetelmä tarkistaa merkki 1: ssä ja suorittaa saman testin. Tämä prosessi jatkuu, kunnes löydetään kelvollisuuden ulkopuolella oleva merkki, ja tällöin parseInt() muuntaa merkkiä ennen olevan merkkijonon numeroksi.
Esimerkiksi, jos haluat muuntaa merkkijonon "12345red" kokonaisluvuksi, parseInt() palauttaa 12345, koska se lopettaa tarkistuksen, kun se löytää kirjaimen r.
Merkkijonossa olevat numeroarvot muunnetaan oikein numeroksi, esimerkiksi "0xA" muunnetaan oikein numeroksi 10. Kuitenkin merkkijono "22.5" muunnetaan 22:ksi, koska piste on virheellinen merkki kokonaisluvulle.
Tässä on joitakin esimerkkejä:
var iNum1 = parseInt("12345red"); //palauttaa 12345 var iNum1 = parseInt("0xA"); //palauttaa 10 var iNum1 = parseInt("56.9"); //palauttaa 56 var iNum1 = parseInt("red"); //palauttaa NaN
parseInt() -menetelmällä on myös perusmoodi, joka voi muuntaa binääri-, oktaali-, kaksinumeroisen ja muiden minkä tahansa muodon merkkijonon kokonaisluvuksi. Perusmuoto määritetään parseInt() -menetelmän toisella parametrilla, joten jos haluat解析十六进制的值,sinun täytyy kutsua parseInt() -menetelmää seuraavasti:
var iNum1 = parseInt("AF", 16); //palauttaa 175
Totta kai, binääri-, oktaali- ja jopa kymmenluku (oletusasetus) voidaan kutsua tällä tavalla parseInt() -menetelmää:
var iNum1 = parseInt("10", 2); //palauttaa 2 var iNum2 = parseInt("10", 8); // palauttaa 8 var iNum3 = parseInt("10", 10); // palauttaa 10
Jos desimaaliluku sisältää johtavan nollan, on parasta käyttää perusluvuksi 10, jotta ei saada oktaalilukua sattumalta. Esimerkiksi:
var iNum1 = parseInt("010"); // palauttaa 8 var iNum2 = parseInt("010", 8); // palauttaa 8 var iNum3 = parseInt("010", 10); // palauttaa 10
Tässä koodissa kaksi riviä koodia tulkitaan merkkijonoksi "010" numeroksi. Ensimmäinen rivi koodia tulkitaan oktaalimuodossa, ja se käsitellään samalla tavalla kuin toinen rivi koodia (määritetty peruslukuksi 8). Viimeinen rivi koodia määrittää perusluvuksi 10, joten iNum3 viimein on 10.
katso
Katso JavaScript viittausopasTässä on tarkempia tietoja parseInt() -metodista:parseInt().
parseFloat()
parseFloat() -metodi käsittelee samalla tavalla kuin parseInt() -metodi, tarkastellen jokaisen merkin indeksistä 0 eteenpäin, kunnes löytää ensimmäisen kelvottoman merkin, ja muuntaa kyseisen merkin edellä olevan merkkijonon numeroksi.
Kuitenkin, tämän metodin osalta, ensimmäinen esiintyvä desimaalipiste on kelvollinen merkki. Jos on kaksi desimaalipistettä, toinen desimaalipiste tulkitaan epäkelvolliseksi. parseFloat() muuntaa desimaalipisteen edellä olevat merkit numeroksi. Tämä tarkoittaa, että merkkijono "11.22.33" tulkitaan 11.22:ksi.
parseFloat() -metodin käytössä on toinen ero siinä, että merkkijonojen täytyy olla desimaalimuodossa esitettyjä lukuja, ei oktaalimuodossa tai heksadesimaalimuodossa. Tämä metodi ohittaa johtavat nollat, joten oktaaliluku 0102 tulkitaan 102:ksi. Heksadesimaaliluvun 0xA tulkitaan NaN:ksi, koska x ei ole kelvollinen merkki desimaaliluvussa。(Huomautus:Testauksen mukaan tarkka selaimen toteutus palauttaa 0, ei NaN。)
Lisäksi parseFloat() -metodi ei ole perusmalli.
Tässä on joitakin esimerkkejä parseFloat() -metodin käytöstä:
var fNum1 = parseFloat("12345red"); // palauttaa 12345 var fNum2 = parseFloat("0xA"); // palauttaa NaN var fNum3 = parseFloat("11.2"); // palauttaa 11.2 var fNum4 = parseFloat("11.22.33"); // palauttaa 11.22 var fNum5 = parseFloat("0102"); // palauttaa 102 var fNum1 = parseFloat("red"); // palauttaa NaN
katso
Katso JavaScript viittausopasTässä on yksityiskohtaiset tiedot parseFloat() -menetelmästä:parseFloat().
pakottavaa muunnosta
Voit myös käyttääPakottava muunnos (type casting)Käsitelläksesi muunnettavien arvojen tyyppiä. Pakottava muunnos voi antaa pääsyn tiettyihin arvoihin, vaikka ne olisivat toista tyyppiä.
Tekijänoikeusmerkintä:cast tarkoittaa "valmistaa" ja sopii hyvin "pakottava muunnos" -käsitteeseen.
ECMAScriptissä käytettävät kolme pakottavaa muunnosta ovat seuraavat:
- Boolean(value) - muunna annettu arvo totuusarvoksi;
- Number(value) - muunna annettu arvo luvuksi (voi olla kokonaisluku tai desimaaliluku);
- String(value) - muunna annettu arvo merkkijonoksi;
Kun muunnetaan arvoa yhdellä näistä kolmesta funktiona, luodaan uusi arvo, joka tallentaa alkuperäisestä arvosta suoraan muunnetun arvon. Tämä voi aiheuttaa odottamattomia seurauksia.
Boolean() -funktio
Kun muunnettava arvo on vähintään yhden merkin merkkijono, ei nollan arvoinen luku tai objekti, Boolean() -funktio palauttaa true. Jos arvo on tyhjä merkkijono, luku 0, undefined tai null, se palauttaa false.
Voit testata pakottavaa muunnosta seuraavalla koodilla:
var b1 = Boolean(""); // false - tyhjä merkkijono var b2 = Boolean("hello"); // true - ei tyhjä merkkijono var b1 = Boolean(50); // true - ei nollan arvoinen luku var b1 = Boolean(null); // false - null var b1 = Boolean(0); // false - nolla var b1 = Boolean(new object()); // true - objekti
Number() -funktio
Number() -funktion pakottava muuntaminen on samanlainen kuin parseInt() ja parseFloat() -metodien käsittely, mutta se muuntaa koko arvon, ei osan arvoa.
Muistatteko, että parseInt() ja parseFloat() -metodit muuntavat vain ensimmäisen epäsyöttökoodin edessä olevan merkkijonon, joten "1.2.3" muunnetaan erikseen "1" ja "1.2".
Number() -muunnoksella "1.2.3" palautetaan NaN, koska koko merkkijonovarvo ei voi muuntua numeroksi. Jos merkkijonovarvo voidaan muuntaa kokonaisuudessaan, Number() -metodi katsoo, onko kutsuttu parseInt() -metodia vai parseFloat() -metodia.
Seuraavassa taulukossa selitetään, mitä tapahtuu, kun eri arvoihin kutsutaan Number() -metodia:
Käyttö | Tulos |
---|---|
Number(false) | 0 |
Number(true) | 1 |
Number(undefined) | NaN |
Number(null) | 0 |
Number("1.2") | 1.2 |
Number("12") | 12 |
Number("1.2.3") | NaN |
Number(new object()) | NaN |
Number(50) | 50 |
String() -funktio
Viimeinen pakollisen tyyppimuunnoksen metodi String() on yksinkertaisin, koska se voi muuntaa mitä tahansa arvoa merkkijonoksi.
Tämän tyyppisen pakollisen tyyppimuunnoksen suorittamiseksi riittää kutsua arvon toString() -metodi, joka on annettu parametrina, eli muuntaa 12:ksi "12", true:ksi "true", false:ksi "false" ja niin edelleen.
Pakollisen tyyppimuunnoksen ja toString() metodin kutsun ainoa ero on, että null- ja undefined-arvojen pakollinen tyyppimuunnos voi tuottaa merkkijonon ilman virheen aiheuttamista:
var s1 = String(null); // "null" var oNull = null; var s2 = oNull.toString(); // aiheuttaa virheen
Kun käsitellään ECMAScriptin kaltaisia heikkoja tyyppikieliä, pakollinen tyyppimuunnos on erittäin hyödyllinen, mutta tulisi varmistaa, että käytetään arvojen oikeaa muotoa.
- Edellinen sivu ECMAScript-alkuperäiset tyypit
- Seuraava sivu ECMAScript-referenssityypit