Konverze typu

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ím

V 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 a NaN , stane se false .
  • 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 je NaN jako číslo, nikoli 0 .
  • "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.