⊗jsPmBsATC 43 of 505 menu

Automatická konverzia typov údajov

Ako už viete, reťazce v JavaScripte by mali byť uvedené v úvodzovkách. Môže sa stať, že všetky znaky reťazca budú číslice:

let a = '123';

V tomto prípade je premenná a tiež reťazcom, ale s určitou nuansou.

Podstata nuansy je nasledovná: ak vykonáme nejakú matematickú operáciu s reťazcom obsahujúcim číslice - táto operácia sa vykoná tak, ako keby sme mali skutočne čísla, a nie reťazce:

alert('2' * '3'); // vypíše 6

V tomto prípade JavaScript vidí, že sa pokúšame vykonať operáciu, ktorá je pre reťazce nepovolená, ale pre čísla povolená.

Tiež vidí, že naše reťazce sú v skutočnosti čísla v úvodzovkách. Preto JavaScript automaticky vykoná konverziu týchto reťazcov na čísla a vykoná príslušnú matematickú operáciu s nimi.

Takto to funguje, ak v našich reťazcoch sú len čísla. Ak tam bude aspoň jedno písmeno - JavaScript považuje operáciu za nekorektnú a jej výsledkom bude hodnota NaN:

alert('2' * '3s'); // vypíše NaN

Okrem toho, automatická konverzia prebieha, ak je operácia matematicky korektná, ale je nepovolená pre reťazce.

Napríklad, reťazce nie je možné (na rozdiel od čísel) násobiť, deliť, odčítať, preto vo všetkých takýchto operáciách prebehne automatická konverzia reťazcov s číslicami na čísla.

Avšak, reťazce, rovnako ako čísla, sa sčítavajú pomocou operátora +. To znamená, že v prípade sčítania automatická konverzia neprebehne:

let a = '1' + '2'; alert(a); // vypíše '12' - došlo k sčítaniu reťazcov

Ak je jeden sčítanec číslo a druhý - reťazec, vždy zvíťazí reťazec:

let a = 1 + '2'; alert(a); // vypíše '12'

V takýchto prípadoch JavaScript, naopak, automaticky konvertuje čísla na reťazce a vykoná sčítanie reťazcov.

Existujú však nuansy, keď je sčítancov viac ako dva: v tomto prípade konverzia na určitý typ závisí od poradia vykonávania operácií.

V nasledujúcom príklade sa najprv 2 a 3 sčítajú ako čísla a potom sa výsledok pripočíta k reťazcu '1' už ako reťazec '5', čo nakoniec dá reťazec '15':

let a = '1' + (2 + 3); alert(a); // vypíše '15'

Ak však odstránime zátvorky, všetko sa bude sčítať zľava doprava. To znamená, že najprv k reťazcu '1' sa pripočíta číslo 2 a výsledkom bude reťazec '12'. Potom k tomuto reťazcu sa pripočíta číslo 3 a výsledkom bude reťazec '123':

let a = '1' + 2 + 3; alert(a); // vypíše '123'

Avšak v nasledujúcom príklade sú čísla 2 a 3 napísané na začiatku, preto sa najprv sčítajú ako čísla, čím vznikne výsledok číslo 5, a potom k tomuto číslu sa pripočíta reťazec '1', čím vznikne reťazec '51':

let a = 2 + 3 + '1'; alert(a); // vypíše '51'

Bez spustenia kódu určite, čo sa vypíše na obrazovku:

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

Bez spustenia kódu určite, čo sa vypíše na obrazovku:

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

Bez spustenia kódu určite, čo sa vypíše na obrazovku:

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

Bez spustenia kódu určite, čo sa vypíše na obrazovku:

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

Bez spustenia kódu určite, čo sa vypíše na obrazovku:

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

Bez spustenia kódu určite, čo sa vypíše na obrazovku:

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

Bez spustenia kódu určite, čo sa vypíše na obrazovku:

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

Bez spustenia kódu určite, čo sa vypíše na obrazovku:

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

Bez spustenia kódu určite, čo sa vypíše na obrazovku:

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

Bez spustenia kódu určite, čo sa vypíše na obrazovku:

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

Bez spustenia kódu určite, čo sa vypíše na obrazovku:

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

Bez spustenia kódu určite, čo sa vypíše na obrazovku:

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

Bez spustenia kódu určite, čo sa vypíše na obrazovku:

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

Bez spustenia kódu určite, čo sa vypíše na obrazovku:

let a = '' + 3 + 1; alert(a);
Slovenčina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používame cookies na fungovanie stránky, analýzu a personalizáciu. Spracúvanie údajov prebieha v súlade s Politikou ochrany osobných údajov.
prijať všetky nastaviť odmietnuť