⊗jsPmBsATC 43 of 505 menu

Automatická konverze datových typů

Jak již víte, řetězce v JavaScriptu by se měly psát do uvozovek. Může se stát, že všechny znaky řetězce budou číslice:

let a = '123';

V tomto případě je proměnná a také řetězec, ale s určitým nuancem.

Podstata nuance je následující: pokud nad řetězcem s číslicemi provedete nějakou matematickou operaci - tato operace bude provedena tak, jako bychom měli skutečně čísla, ne řetězce:

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

V tomto případě JavaScript vidí, že se pokoušíme provést operaci, která je pro řetězce nedovolená, ale pro čísla povolená.

Zároveň vidí, že naše řetězce jsou vlastně čísla v uvozovkách. Proto JavaScript automaticky provede převod těchto řetězců na čísla a provede příslušnou matematickou operaci nad nimi.

Toto funguje, pokud jsou v našich řetězcích pouze číslice. Pokud tam bude alespoň jedno písmeno - JavaScript považuje operaci za nekorektní a jejím výsledkem bude hodnota NaN:

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

Kromě toho k automatické konverzi dochází, pokud je operace matematicky korektní, ale pro řetězce nedovolená.

Například, řetězce nelze (na rozdíl od čísel) násobit, dělit, odečítat, proto ve všech takových operacích dojde k automatické konverzi řetězců s číslicemi na čísla.

Avšak, řetězce, stejně jako čísla, se sčítají pomocí operátoru +. To znamená, že v případě sčítání k automatické konverzi nedojde:

let a = '1' + '2'; alert(a); // vypíše '12' - došlo ke spojení řetězců

Pokud je jeden sčítanec číslo, a druhý - řetězec, vždy vyhraje řetězec:

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

V takových případech JavaScript naopak automaticky převede čísla na řetězce a provede spojení řetězců.

Existují však nuance, když je sčítanců více než dva: v tomto případě konverze na určitý typ závisí na pořadí provádění operací.

V následujícím příkladu se nejprve 2 a 3 sečtou jako čísla, a poté se výsledek přičte k řetězci '1' již jako řetězec '5', což nakonec dá řetězec '15':

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

Pokud však odstraníme závorky, vše se bude sčítat zleva doprava. To znamená, že nejprve k řetězci '1' se přičte číslo 2 a výsledkem bude řetězec '12'. Poté k tomuto řetězci se přičte číslo 3 a výsledkem bude řetězec '123':

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

V následujícím příkladu jsou však čísla 2 a 3 napsána na začátku, proto se nejprve sečtou jako čísla, čímž vznikne výsledek číslo 5, a poté k tomuto číslu se přičte řetězec '1', čímž vznikne řetězec '51':

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

Bez spuštění kodu určete, co se vypíše na obrazovku:

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

Bez spuštění kodu určete, co se vypíše na obrazovku:

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

Bez spuštění kodu určete, co se vypíše na obrazovku:

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

Bez spuštění kodu určete, co se vypíše na obrazovku:

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

Bez spuštění kodu určete, co se vypíše na obrazovku:

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

Bez spuštění kodu určete, co se vypíše na obrazovku:

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

Bez spuštění kodu určete, co se vypíše na obrazovku:

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

Bez spuštění kodu určete, co se vypíše na obrazovku:

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

Bez spuštění kodu určete, co se vypíše na obrazovku:

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

Bez spuštění kodu určete, co se vypíše na obrazovku:

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

Bez spuštění kodu určete, co se vypíše na obrazovku:

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

Bez spuštění kodu určete, co se vypíše na obrazovku:

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

Bez spuštění kodu určete, co se vypíše na obrazovku:

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

Bez spuštění kodu určete, co se vypíše na obrazovku:

let a = '' + 3 + 1; alert(a);
Čeština
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používáme soubory cookie pro fungování webu, analýzu a personalizaci. Zpracování údajů probíhá v souladu s Zásadami ochrany osobních údajů.
přijmout vše přizpůsobit odmítnout