Operátory a funkce většinou automaticky převádějí hodnoty, které jim byly přiděleny, na správný typ.
Například alert
automaticky převede jakoukoli hodnotu na řetězec, aby ji zobrazil. Matematické operace převádějí hodnoty na čísla.
Existují také případy, kdy potřebujeme explicitně převést hodnotu na očekávaný typ.
O objektech ještě nemluvímV této kapitole se nebudeme zabývat objekty. Zatím budeme mluvit jen o primitivech.
Později, až se naučíme o objektech, v kapitole Převod objektu na primitivní uvidíme, jak do něj objekty zapadají.
Konverze řetězce
Konverze řetězce nastává, když potřebujeme hodnotu ve tvaru řetězce.
Například alert(value)
zobrazuje hodnotu.
Můžeme také zavolat String(value)
funkce pro převod hodnoty na řetězec:
let value = true;
alert(typeof value); // boolean
value = String(value); // now value is a string "true"
alert(typeof value); // string
Konverze řetězců je většinou zřejmá. A false
se změní na "false"
, null
se změní na "null"
, atd.
Číselná konverze
Číselný převod probíhá v matematických funkcích a výrazech automaticky.
Například při dělení /
se použije na nečíslice:
alert( "6" / "2" ); // 3, strings are converted to numbers
Můžeme použít Number(value)
explicitně převede value
na číslo:
let str = "123";
alert(typeof str); // string
let num = Number(str); // becomes a number 123
alert(typeof num); // number
Explicitní převod je obvykle vyžadován, když čteme hodnotu ze zdroje založeného na řetězcích, jako je textový formulář, ale očekáváme zadání čísla.
Pokud řetězec není platné číslo, výsledkem takového převodu je NaN
. Například:
let age = Number("an arbitrary string instead of a number");
alert(age); // NaN, conversion failed
Pravidla numerického převodu:
Hodnota | Stává se… |
---|---|
undefined | NaN |
null | 0 |
true and false | 1 a 0 |
string | Mezery (včetně mezer, tabulátorů \t , nové řádky \n atd.) ze začátku a konce jsou odstraněny. Pokud je zbývající řetězec prázdný, výsledkem je 0 . Jinak se číslo „čte“ z řetězce. Chyba dává NaN . |
Příklady:
alert( Number(" 123 ") ); // 123
alert( Number("123z") ); // NaN (error reading a number at "z")
alert( Number(true) ); // 1
alert( Number(false) ); // 0
Vezměte prosím na vědomí, že null
a undefined
chovat se zde jinak:null
se stane nulou, zatímco undefined
se změní na NaN
.
Většina matematických operátorů také provádí takový převod, uvidíme to v další kapitole.
Booleovská konverze
Booleovská konverze je nejjednodušší.
Děje se to v logických operacích (později se setkáme s testy podmínek a dalšími podobnými věcmi), ale lze to provést i explicitně voláním Boolean(value)
.
Pravidlo převodu:
- Hodnoty, které jsou intuitivně „prázdné“, například
0
, prázdný řetězec,null
,undefined
aNaN
, stane sefalse
. - Další hodnoty se stanou
true
.
Například:
alert( Boolean(1) ); // true
alert( Boolean(0) ); // false
alert( Boolean("hello") ); // true
alert( Boolean("") ); // false
Poznámka:řetězec s nulou "0"
je true
Některé jazyky (jmenovitě PHP) zacházejí s "0"
jako false
. Ale v JavaScriptu je neprázdný řetězec vždy true
.
alert( Boolean("0") ); // true
alert( Boolean(" ") ); // spaces, also true (any non-empty string is true)
Shrnutí
Tři nejpoužívanější převody typu jsou na řetězec, na číslo a na boolean.
String Conversion
– Vyskytuje se, když něco vydáváme. Lze provést pomocí String(value)
. Převod na řetězec je u primitivních hodnot obvykle zřejmý.
Numeric Conversion
– Vyskytuje se v matematických operacích. Lze provést pomocí Number(value)
.
Převod se řídí pravidly:
Hodnota | Stává se… |
---|---|
undefined | NaN |
null | 0 |
true / false | 1 / 0 |
string | Řetězec se čte „tak, jak je“, mezery (včetně mezer, tabulátorů \t , nové řádky \n atd.) z obou stran jsou ignorovány. Prázdný řetězec se změní na 0 . Chyba dává NaN . |
Boolean Conversion
– Vyskytuje se v logických operacích. Lze provést pomocí Boolean(value)
.
Dodržuje pravidla:
Hodnota | Stává se… |
---|---|
0 , null , undefined , NaN , "" | false |
jakákoli jiná hodnota | true |
Většina těchto pravidel je snadno pochopitelná a zapamatovatelná. Pozoruhodné výjimky, kde lidé obvykle dělají chyby, jsou:
undefined
jeNaN
jako číslo, nikoli0
."0"
a řetězce obsahující pouze mezery jako" "
jsou pravdivé jako booleovská hodnota.
Objekty zde nejsou zahrnuty. Vrátíme se k nim později v kapitole Převod objektů na primitivní, která je věnována výhradně objektům, až se dozvíme více základních věcí o JavaScriptu.