Automatska konverzija tipova podataka
Kao što već znate, stringove u JavaScript-u treba stavljati u navodnike. Može se desiti da svim karakterima stringa budu cifre:
let a = '123';
U ovom slučaju promenljiva a je takođe
string, ali sa određenim nijansama.
Suština nijanse je sledeća: ako nad stringom sa ciframa izvršite bilo koju matematičku operaciju - ta operacija će biti izvršena kao da zaista imamo brojeve, a ne stringove:
alert('2' * '3'); // ispisaće 6
U ovom slučaju JavaScript vidi da pokušavamo da izvršimo nedozvoljenu za stringove, ali dozvoljenu za brojeve operaciju.
On takođe vidi da su naši stringovi zapravo brojevi u navodnicima. Zato JavaScript automatski izvršava konverziju ovih stringova u brojeve i izvršava odgovarajuću matematičku operaciju nad njima.
Ovo funkcioniše ako u našim stringovima postoje samo
cifre. Ako tamo bude bar jedno slovo
- JavaScript će smartati operaciju nevalidnom
i rezultat će biti vrednost NaN:
alert('2' * '3s'); // ispisaće NaN
Osim toga, automatska konverzija se dešava ako je operacija matematički validna, ali nedozvoljena za stringove.
Na primer, stringove se ne može (a brojeve može) množiti, deliti, oduzimati, pa će u svim takvim operacijama doći do automatske konverzije stringova sa ciframa u brojeve.
Međutim, stringovi se, kao i brojevi, sabiraju
pomoću operatora +. To znači
da u slučaju sabiranja neće doći do automatske konverzije:
let a = '1' + '2';
alert(a); // ispisaće '12' - došlo je do sabiranja stringova
Ako je jedan sabirak broj, a drugi - string, uvek pobedjuje string:
let a = 1 + '2';
alert(a); // ispisaće '12'
U ovakvim slučajevima JavaScript, naprotiv, automatski konvertuje brojeve u stringove i izvršava sabiranje stringova.
Postoje, međutim, nijanse kada ima više sabiraka, nego dva: u ovom slučaju konverzija ka određenom tipu zavisi od redosleda izvršavanja operacija.
U sledećem primeru prvo će se 2 i 3
sabrati kao brojevi, a zatim će rezultat biti dodat
stringu '1' već kao string '5',
što će na kraju dati string '15':
let a = '1' + (2 + 3);
alert(a); // ispisaće '15'
Ako se uklone zagrade, onda će se sve sabirati
sleva na desno. To znači da će se prvo stringu '1'
dodati broj 2 i kao rezultat
će se dobiti string '12'. Zatim će se ovom
stringu dodati broj 3 i kao rezultat
će se dobiti string '123':
let a = '1' + 2 + 3;
alert(a); // ispisaće '123'
U sledećem primeru brojevi 2
i 3 su napisani na početku, pa će se prvo
sabrati kao brojevi, dajući kao rezultat
broj 5, a zatim će se ovom broju dodati
string '1', dajući na kraju string '51':
let a = 2 + 3 + '1';
alert(a); // ispisaće '51'
Bez pokretanja koda, odredite šta će se ispisati na ekran:
let a = '5' + '2';
alert(a);
Bez pokretanja koda, odredite šta će se ispisati na ekran:
let a = '5' + 2;
alert(a);
Bez pokretanja koda, odredite šta će se ispisati na ekran:
let a = 5 + '2';
alert(a);
Bez pokretanja koda, odredite šta će se ispisati na ekran:
let a = 5 + 2;
alert(a);
Bez pokretanja koda, odredite šta će se ispisati na ekran:
let a = '5' * '2';
alert(a);
Bez pokretanja koda, odredite šta će se ispisati na ekran:
let a = '5' - '2';
alert(a);
Bez pokretanja koda, odredite šta će se ispisati na ekran:
let a = '5' / '2';
alert(a);
Bez pokretanja koda, odredite šta će se ispisati na ekran:
let a = '5' % '2';
alert(a);
Bez pokretanja koda, odredite šta će se ispisati na ekran:
let a = '5s' * '2';
alert(a);
Bez pokretanja koda, odredite šta će se ispisati na ekran:
let a = '5s' + '2';
alert(a);
Bez pokretanja koda, odredite šta će se ispisati na ekran:
let a = (-'5') + (-'2');
alert(a);
Bez pokretanja koda, odredite šta će se ispisati na ekran:
let a = '5' * 1 + '2' * 1;
alert(a);
Bez pokretanja koda, odredite šta će se ispisati na ekran:
let a = '5' * '1' + '2' * '1';
alert(a);
Bez pokretanja koda, odredite šta će se ispisati na ekran:
let a = '' + 3 + 1;
alert(a);