⊗jsPmBsATC 43 of 505 menu

Automaattinen tietotyyppien muunnos

Kuten jo tiedät, merkkijonot JavaScriptissä tulee laittaa lainausmerkkeihin. Voi olla tilanne, että kaikki merkkijonon merkit ovat numeroita:

let a = '123';

Tässä tapauksessa muuttuja a on myös merkkijono, mutta siinä on erityispiirre.

Erityispiirteen ydin on seuraava: jos merkkijonolle numeroilla suoritetaan jokin matemaattinen operaatio - tämä operaatio suoritetaan niin kuin meillä todella olisi numeroita, eivätkä merkkijonot:

alert('2' * '3'); // tulostaa 6

Tässä tapauksessa JavaScript näkee, että me yritämme suorittaa merkkijonoille kelpaamatonta, mutta numeroille sallittua operaatiota.

Se näkee myös, että käytännössä merkkijonot ovat numeroita lainausmerkeissä. Siksi JavaScript muuntaa automaattisesti nämä merkkijonot numereiksi ja suorittaa vastaavan matemaattisen operaation niille.

Tämä toimii, jos merkkijonoissamme on vain numeroita. Jos siellä on ainakin yksi kirjain - JavaScript pitää operaatiota virheellisenä ja tekee sen tuloksesta arvon NaN:

alert('2' * '3s'); // tulostaa NaN

Lisäksi automaattinen muunnos tapahtuu, jos operaatio on matemaattisesti oikein, mutta ei sallittu merkkijonoille.

Esimerkiksi merkkijonoja ei voi (mutta numerot voi) kertoa, jakaa, vähentää, joten kaikissa tällaisissa operaatioissa tapahtuu automaattinen muunnos merkkijonoista numeroiksi.

Kuitenkin merkkijonot, kuten numerot, lasketaan yhteen operaattorilla +. Tämä tarkoittaa, että yhteenlaskussa automaattista muunnosta ei tapahdu:

let a = '1' + '2'; alert(a); // tulostaa '12' - tapahtui merkkijonojen yhteenlasku

Jos toinen yhteenlaskettavista on numero, ja toinen - merkkijono, niin merkkijono aina voittaa:

let a = 1 + '2'; alert(a); // tulostaa '12'

Tällaisissa tapauksissa JavaScript, päinvastoin, automaattisesti muuntaa numerot merkkijonoiksi ja suorittaa merkkijonojen yhteenlaskun.

On kuitenkin vivahteita, kun yhteenlaskettavia on enemmän kuin kaksi: tässä tapauksessa muunnos tiettyyn tyyppiin riippuu operaatioiden suoritusjärjestyksestä.

Seuraavassa esimerkissä ensin 2 ja 3 lasketaan yhteen numeroina, ja sitten tulos lisätään merkkijonoon '1' jo merkkijonona '5', mikä lopulta antaa merkkijonon '15':

let a = '1' + (2 + 3); alert(a); // tulostaa '15'

Jos sulut kuitenkin poistetaan, kaikki lasketaan vasemmalta oikealle. Eli ensin merkkijonoon '1' lisätään numero 2 ja tuloksena saadaan merkkijono '12'. Sitten tähän merkkijonoon lisätään numero 3 ja tuloksena saadaan merkkijono '123':

let a = '1' + 2 + 3; alert(a); // tulostaa '123'

Mutta seuraavassa esimerkissä numerot 2 ja 3 on kirjoitettu alkuun, joten ensin ne lasketaan yhteen numeroina, jolloin tulokseksi tulee numero 5, ja sitten tähän numeroon lisätään merkkijono '1', jolloin tulokseksi saadaan merkkijono '51':

let a = 2 + 3 + '1'; alert(a); // tulostaa '51'

Määritä käynnistämättä koodia, mitä näytetään ruudulla:

let a = '5' + '2'; alert(a);

Määritä käynnistämättä koodia, mitä näytetään ruudulla:

let a = '5' + 2; alert(a);

Määritä käynnistämättä koodia, mitä näytetään ruudulla:

let a = 5 + '2'; alert(a);

Määritä käynnistämättä koodia, mitä näytetään ruudulla:

let a = 5 + 2; alert(a);

Määritä käynnistämättä koodia, mitä näytetään ruudulla:

let a = '5' * '2'; alert(a);

Määritä käynnistämättä koodia, mitä näytetään ruudulla:

let a = '5' - '2'; alert(a);

Määritä käynnistämättä koodia, mitä näytetään ruudulla:

let a = '5' / '2'; alert(a);

Määritä käynnistämättä koodia, mitä näytetään ruudulla:

let a = '5' % '2'; alert(a);

Määritä käynnistämättä koodia, mitä näytetään ruudulla:

let a = '5s' * '2'; alert(a);

Määritä käynnistämättä koodia, mitä näytetään ruudulla:

let a = '5s' + '2'; alert(a);

Määritä käynnistämättä koodia, mitä näytetään ruudulla:

let a = (-'5') + (-'2'); alert(a);

Määritä käynnistämättä koodia, mitä näytetään ruudulla:

let a = '5' * 1 + '2' * 1; alert(a);

Määritä käynnistämättä koodia, mitä näytetään ruudulla:

let a = '5' * '1' + '2' * '1'; alert(a);

Määritä käynnistämättä koodia, mitä näytetään ruudulla:

let a = '' + 3 + 1; alert(a);
Suomi
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Käytämme evästeitä verkkosivuston toiminnalle, analytiikalle ja personoinnille. Tietojen käsittely tapahtuu Tietosuojakäytännön mukaisesti.
hyväksy kaikki mukauta hylkää