Automatinis duomenų tipų konvertavimas
Kaip jau žinote, eilutes JavaScript'e reikia pažymėti kabutėmis. Gali būti taip, kad visi eilutės simboliai bus skaičiai:
let a = '123';
Šiuo atveju kintamasis a taip pat yra
eilutė, bet su tam tikru niuansu.
Niuansas yra toks: jei su eilute, sudaryta iš skaičių, atliekama kokia nors matematinė operacija - ši operacija bus atlikta taip, tarsi mes tikrai turėtume skaičius, o ne eilutes:
alert('2' * '3'); // išves 6
Šiuo atveju JavaScript mato, kad mes bandome atlikti operaciją, kuri yra netinkama eilutėms, bet leistina skaičiams.
Jis taip pat mato, kad iš tikrųjų mūsų eilutės - tai skaičiai kabutėse. Todėl JavaScript automatiškai atlieka šių eilučių konvertavimą į skaičius ir atlieka atitinkamą matematinę operaciją su jais.
Tai veikia, jei mūsų eilutėse yra tik
skaitmenys. Jei ten bus bent viena raidė
- JavaScript laikys operaciją netinkama
ir padarys jos rezultatą reikšmę NaN:
alert('2' * '3s'); // išves NaN
Be to, automatinis konvertavimas įvyksta, jei operacija yra matematiškai teisinga, bet neleistina eilutėms.
Pavyzdžiui, eilučių negalima (o skaičius galima) dauginti, dalinti, atimti, todėl visose tokiose operacijose bus automatiškai eilutės su skaitmenimis konvertuojamos į skaičius.
Tačiau eilutės, kaip ir skaičiai, sudedami
naudojant operatorių +. Tai reiškia,
kad sudėties atveju automatinio konvertavimo
nebus:
let a = '1' + '2';
alert(a); // išves '12' - įvyko eilučių sudėtis
Jei vienas iš dėmenų yra skaičius, o kitas - eilutė, tai visada laimi eilutė:
let a = 1 + '2';
alert(a); // išves '12'
Tokiais atvejais JavaScript, atvirkščiai, automatiškai konvertuoja skaičius į eilutes ir atlieka eilučių sudėtį.
Tačiau yra niuansų, kai dėmenų yra daugiau negu du: šiuo atveju konvertavimas į tam tikrą tipą priklauso nuo operacijų vykdymo eilės.
Šiame pavyzdyje pirmiausia 2 ir 3
susidės kaip skaičiai, o tada rezultatas bus pridetas
prie eilutės '1' jau kaip eilutė '5',
kas galų gale duos eilutę '15':
let a = '1' + (2 + 3);
alert(a); // išves '15'
Jei pašalinsime skliaustus, tada viskas bus sudedama
iš kairės į dešinę. Tai yra, pirmiausia prie eilutės '1'
bus pridėtas skaičius 2 ir rezultate
gausime eilutę '12'. Tada prie šios
eilutės bus pridėtas skaičius 3 ir rezultate
gausime eilutę '123':
let a = '1' + 2 + 3;
alert(a); // išves '123'
O štai kitame pavyzdyje skaičiai 2
ir 3 yra parašyti pradžioje, todėl pirmiausia
jie susidės kaip skaičiai, duodami rezultate
skaičių 5, o tada prie šio skaičiaus bus pridėta
eilutė '1', duodanti galutinį rezultatą eilutę '51':
let a = 2 + 3 + '1';
alert(a); // išves '51'
Paleisdami kodą, nustatykite, kas bus išvesta į ekraną:
let a = '5' + '2';
alert(a);
Paleisdami kodą, nustatykite, kas bus išvesta į ekraną:
let a = '5' + 2;
alert(a);
Paleisdami kodą, nustatykite, kas bus išvesta į ekraną:
let a = 5 + '2';
alert(a);
Paleisdami kodą, nustatykite, kas bus išvesta į ekraną:
let a = 5 + 2;
alert(a);
Paleisdami kodą, nustatykite, kas bus išvesta į ekraną:
let a = '5' * '2';
alert(a);
Paleisdami kodą, nustatykite, kas bus išvesta į ekraną:
let a = '5' - '2';
alert(a);
Paleisdami kodą, nustatykite, kas bus išvesta į ekraną:
let a = '5' / '2';
alert(a);
Paleisdami kodą, nustatykite, kas bus išvesta į ekraną:
let a = '5' % '2';
alert(a);
Paleisdami kodą, nustatykite, kas bus išvesta į ekraną:
let a = '5s' * '2';
alert(a);
Paleisdami kodą, nustatykite, kas bus išvesta į ekraną:
let a = '5s' + '2';
alert(a);
Paleisdami kodą, nustatykite, kas bus išvesta į ekraną:
let a = (-'5') + (-'2');
alert(a);
Paleisdami kodą, nustatykite, kas bus išvesta į ekraną:
let a = '5' * 1 + '2' * 1;
alert(a);
Paleisdami kodą, nustatykite, kas bus išvesta į ekraną:
let a = '5' * '1' + '2' * '1';
alert(a);
Paleisdami kodą, nustatykite, kas bus išvesta į ekraną:
let a = '' + 3 + 1;
alert(a);