⊗jsPmBsATC 43 of 505 menu

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);
Română
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Folosim cookie pentru funcționarea site-ului, analiză și personalizare. Prelucrarea datelor are loc în conformitate cu Politica de confidențialitate.
acceptă toate configurează respinge