NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 4 - Referenční a hodnotové datové typy v JavaScriptu

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Michal Žůrek - misaz:6.12.2018 22:15

Interní datové typy mají v JavaScriptu názvy s velkým počátečním písmenem.

 
Odpovědět
6.12.2018 22:15
Avatar
David Hartinger
Vlastník
Avatar
Odpovědět
7.12.2018 11:54
New kid back on the block with a R.I.P
Avatar
Jindřich Máca
Tvůrce
Avatar
Jindřich Máca:7.12.2018 13:56

Oba máte pravdu. :-D Konstruktor toho datového typu se píše s velkým písmenem, stringový název je potom s malým. Nejlépe to asi vystihne tenhle příklad z toho odkazu od Davida:

typeof Number('1') === 'number'; // Number tries to parse things into numbers
 
Odpovědět
7.12.2018 13:56
Avatar
Odpovídá na David Hartinger
Michal Žůrek - misaz:7.12.2018 22:54

jo, dá se považovat za správnou úvahu, ale to co vrátí typeof není název datového typu. To je jakési simple rozlišení mezi undefined, string, number, boolean, … (dle mého názoru k ničemu, viz. dále). Ani jedno z toho není název datového typu, ale jakási výstupní hodnota tohoto operátoru/funkce.

Demonstruje to pěkně příklad s vlastním datovým typem (např. třídou v ES6, v ES5 to funguje stejně).

class Foo {} // v ES5 se to napíše jako function Foo {}
var x = new Foo();
console.log(typeof(x)); // vypíše "object"

// bonus
console.log(typeof(Foo)); // vypíše "function", i ES6 "třídy" jsou pořád jen "funkce".

i proto se pro porovnání datového typu nepoužívá operátor typeof, ale instanceof.

class Foo {}
var x = new Foo();

console.log(x instanceof Foo); // true
console.log(x instanceof Object); // true
console.log(x instanceof String); // false
console.log(x instanceof string); // error: Datový typ string s malým s neexsituje

Protože JavaScript je jazyk od přírody debilní (a ani ES6 to nespraví), tak existují různé záludnosti, které v této logice úplně nedávají smysl.

console.log("ahoj" instanceof String); // false
console.log("ahoj".toString() instanceof String); // false
console.log(new String("ahoj") instanceof String); // true
console.log(5 instanceof Number); // false

Na svou obhajobu ještě uvedu, že alternativní zdroj https://www.w3schools.com/…atatypes.asp je také uvádí s velkými písmeny.

 
Odpovědět
7.12.2018 22:54
Avatar
Odpovídá na Michal Žůrek - misaz
Michal Žůrek - misaz:7.12.2018 23:02

Ještě přikládám jednu perlu

console.log(String("ahoj") instanceof String); // false
 
Odpovědět
7.12.2018 23:02
Avatar
Odpovídá na David Hartinger
Michal Žůrek - misaz:7.12.2018 23:09

V dokumentaci http://www.ecma-international.org/…ECMA-262.pdf jsou popsány typy na straně 16 a jsou také uvedeny s velkými písmeny.

 
Odpovědět
7.12.2018 23:09
Avatar
Šimon Raichl
Tvůrce
Avatar
Odpovídá na Michal Žůrek - misaz
Šimon Raichl:8.12.2018 0:17

No tak samozrejme, protoze string jako primitivni typ nemuze byt instanci niceho, a pri volani konstruktoru bez klicovyho slova new ti vrati string, kdyz pouzijes pri volani kostruktoru new, tak uz bude instanci String, protoze ti nevrati string ale objekt. Treba u poli uz toto neplati, at uz zavolas Array s new, bez new, nebo napises jako prazdny pole (coz oba predchozi vraceji, pokud je nechas bez parametru, nebo kdyz je parametr 0), je pole instanci Array a zaroven instanci Object podle JS :D :

Array() instanceof Array // true
new Array() instanceof Array // true
[] instanceof Array // true
[] instanceof Object // true

Jinak co se tyce typeof, tak to taky neni uplne dokonaly :D

typeof null // vrati "object"
 
Odpovědět
8.12.2018 0:17
Avatar
Jan Osuský
Člen
Avatar
Jan Osuský:4.3.2019 16:47

Ahoj,

Vidíme, že objekt stále existuje a ukazuje na něj proměnná "u", "v" proměnné v již není reference.

písmenka "u" a "v" by asi měla být prohozená :).

 
Odpovědět
4.3.2019 16:47
Avatar
Jakub Podskalský:23.10.2019 21:25

Vidíme, že objekt stále existuje a ukazuje na něj proměnná u, v proměnné v již není reference.

Ještě jednou podtrhnu, prosím o prohození písmenek. :)

 
Odpovědět
23.10.2019 21:25
Avatar
Jaroslav Drobek:21.6.2022 5:37

Hodnocení:

  • nebuďme netrpěliví, písmenka jsou zajisté na cestě!
 
Odpovědět
21.6.2022 5:37
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 16.