Conversia automată a tipurilor de date
După cum știți deja, șirurile de caractere în JavaScript trebuie să fie puse între ghilimele. Se poate întâmpla ca toate caracterele șirului să fie cifre:
let a = '123';
În acest caz, variabila a este tot un
șir de caractere, dar cu o nuanță.
Esența nuanței este următoarea: dacă asupra unui șir cu cifre se execută o operație matematică - această operație va fi efectuată ca și cum am avea într-adevăr numere, nu șiruri de caractere:
alert('2' * '3'); // va afișa 6
În acest caz, JavaScript vede că încercăm să executăm o operație inadmisibilă pentru șiruri, dar admisibilă pentru numere.
El vede de asemenea că, de fapt, șirurile noastre sunt numere în ghilimele. Prin urmare, JavaScript efectuează automat conversia acestor șiruri în numere și execută operația matematică corespunzătoare asupra lor.
Așa ceva funcționează dacă în șirurile noastre sunt doar
cifre. Dacă va fi cel puțin o literă
- JavaScript va considera operația incorectă
și va face ca rezultat valoarea NaN:
alert('2' * '3s'); // va afișa NaN
În plus, conversia automată are loc dacă operația este corectă din punct de vedere matematic, dar este inadmisibilă pentru șiruri.
De exemplu, șirurile nu se pot (dar numerele se pot) înmulți, împărți, scădea, deci în toate astfel de operații va avea loc conversia automată a șirurilor cu cifre în numere.
Cu toate acestea, șirurile, la fel ca și numerele, se adună
cu ajutorul operatorului +. Aceasta înseamnă
că în cazul adunării nu va avea loc conversie automată:
let a = '1' + '2';
alert(a); // va afișa '12' - a avut loc adunarea șirurilor
Dacă unul dintre termeni este un număr, iar celălalt - un șir, întotdeauna câștigă șirul:
let a = 1 + '2';
alert(a); // va afișa '12'
În astfel de cazuri, JavaScript, dimpotrivă, automat converteste numerele în șiruri și efectuează adunarea șirurilor.
Există, totuși, nuanțe atunci când termenii sunt mai mulți decât doi: în acest caz, conversia la un anumit tip depinde de ordinea de executare a operațiilor.
În următorul exemplu, la început 2 și 3
se vor aduna ca numere, iar apoi rezultatul se va adăuga
la șirul '1' deja ca șir '5',
ceea ce în final va da șirul '15':
let a = '1' + (2 + 3);
alert(a); // va afișa '15'
Dacă însă eliminăm parantezele, totul se va aduna
de la stânga la dreapta. Adică mai întâi la șirul '1'
se va adăuga numărul 2 și ca rezultat
se va obține șirul '12'. Apoi la acest
șir se va adăuga numărul 3 și ca rezultat
se va obține șirul '123':
let a = '1' + 2 + 3;
alert(a); // va afișa '123'
Iată în următorul exemplu numerele 2
și 3 sunt scrise la început, deci mai întâi
se vor aduna ca numere, dând ca rezultat
numărul 5, iar apoi la acest număr se va adăuga
șirul '1', dând în final șirul '51':
let a = 2 + 3 + '1';
alert(a); // va afișa '51'
Fără a rula codul, determinați ce va fi afișat pe ecran:
let a = '5' + '2';
alert(a);
Fără a rula codul, determinați ce va fi afișat pe ecran:
let a = '5' + 2;
alert(a);
Fără a rula codul, determinați ce va fi afișat pe ecran:
let a = 5 + '2';
alert(a);
Fără a rula codul, determinați ce va fi afișat pe ecran:
let a = 5 + 2;
alert(a);
Fără a rula codul, determinați ce va fi afișat pe ecran:
let a = '5' * '2';
alert(a);
Fără a rula codul, determinați ce va fi afișat pe ecran:
let a = '5' - '2';
alert(a);
Fără a rula codul, determinați ce va fi afișat pe ecran:
let a = '5' / '2';
alert(a);
Fără a rula codul, determinați ce va fi afișat pe ecran:
let a = '5' % '2';
alert(a);
Fără a rula codul, determinați ce va fi afișat pe ecran:
let a = '5s' * '2';
alert(a);
Fără a rula codul, determinați ce va fi afișat pe ecran:
let a = '5s' + '2';
alert(a);
Fără a rula codul, determinați ce va fi afișat pe ecran:
let a = (-'5') + (-'2');
alert(a);
Fără a rula codul, determinați ce va fi afișat pe ecran:
let a = '5' * 1 + '2' * 1;
alert(a);
Fără a rula codul, determinați ce va fi afișat pe ecran:
let a = '5' * '1' + '2' * '1';
alert(a);
Fără a rula codul, determinați ce va fi afișat pe ecran:
let a = '' + 3 + 1;
alert(a);