⊗jsPmBsATC 43 of 505 menu

Andmetüüpide automaatne teisendamine

Nagu te juba teate, tuleks JavaScriptis stringe võtta jutumärkidesse. Võib juhtuda, et kõik stringi sümbolid on numbrid:

let a = '123';

Sel juhul on muutuja a samuti string, kuid väikese nüansiga.

Nüansi tuum on järgmine: kui stringi koos numbritega teha mõni matemaatiline tehe – tehakse see tehe nii, nagu meil oleksid tõepoolest numbrid, mitte stringid:

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

Sel juhul näeb JavaScript, et me üritame teha stringide jaoks keelatud, kuid numbrite jaoks lubatud tehet.

Ta näeb samuti, et tegelikult on meie stringid - numbrid jutumärkides. Seetõttu teeb JavaScript automaatselt nende stringide teisendamise numbriteks ja teostab nendega vastava matemaatilise tehte.

See toimib siis, kui meie stringides on ainult numbrid. Kui seal on vähemalt üks täht - peab JavaScript tehet vigaseks ja teeb selle tulemuseks väärtuse NaN:

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

Lisaks toimub automaatne teisendamine siis, kui tehe on matemaatiliselt korrektne, kuid stringide jaoks ebasobiv.

Näiteks stringe ei saa (kuid numbreid saab) korrutada, jagada, lahutada, seetõttu toimub kõikides sellistes tehetes stringide numbritega automaatne teisendamine numbriteks.

Siiski liidetakse stringe, nagu ka numbreid, operaatori + abil. See tähendab, et liitmise korral automaatset teisendamist ei toimu:

let a = '1' + '2'; alert(a); // kuvab '12' - toimus stringide liitmine

Kui üks liidetavatest on number ja teine - string, siis alati võidab string:

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

Sellistel juhtudel teeb JavaScript vastupidiselt, automaatselt numbrite teisendamise stringideks ja teostab stringide liitmise.

Siiski on nüansse, kui liidetavaid on rohkem kui kaks: sel juhul sõltub teisendamine konkreetseks tüübiks tehete sooritamise järjekorrast.

Järgmises näites kõigepealt liidetakse 2 ja 3 numbritena ning seejärel liidetakse tulemus stringiga '1' juba kui string '5', mis annab lõpuks stringi '15':

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

Kui aga sulud eemaldada, siis liidetakse kõik vasakult paremale. See tähendab, et kõigepealt stringile '1' liidetakse number 2 ja tulemuseks saadakse string '12'. Seejärel sellele stringile liidetakse number 3 ja tulemuseks saadakse string '123':

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

Kuid järgmises näites on numbrid 2 ja 3 kirjutatud alguses, seega kõigepealt liidetakse need numbritena, saades tulemuseks numbri 5, ning seejärel liidetakse sellele numbrile string '1', saades lõpuks stringi '51':

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

Koodi käivitamata määrake, mis kuvatakse ekraanil:

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

Koodi käivitamata määrake, mis kuvatakse ekraanil:

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

Koodi käivitamata määrake, mis kuvatakse ekraanil:

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

Koodi käivitamata määrake, mis kuvatakse ekraanil:

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

Koodi käivitamata määrake, mis kuvatakse ekraanil:

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

Koodi käivitamata määrake, mis kuvatakse ekraanil:

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

Koodi käivitamata määrake, mis kuvatakse ekraanil:

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

Koodi käivitamata määrake, mis kuvatakse ekraanil:

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

Koodi käivitamata määrake, mis kuvatakse ekraanil:

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

Koodi käivitamata määrake, mis kuvatakse ekraanil:

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

Koodi käivitamata määrake, mis kuvatakse ekraanil:

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

Koodi käivitamata määrake, mis kuvatakse ekraanil:

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

Koodi käivitamata määrake, mis kuvatakse ekraanil:

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

Koodi käivitamata määrake, mis kuvatakse ekraanil:

let a = '' + 3 + 1; alert(a);
Eesti
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Me kasutame saidi toimimiseks, analüüsi ja personaliseerimiseks küpsiseid. Andmete töötlemine toimub vastavalt Privaatsuspoliitikale.
nõustu kõigega häälesta keeldu