Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

Diskusia – 4. diel - Referenčnej a hodnotové dátové typy v JavaScripte

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
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.

 
Odpovedať
6.12.2018 22:15
Avatar
David Hartinger
Vlastník
Avatar
Odpovedať
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
 
Odpovedať
7.12.2018 13:56
Avatar
Odpovedá 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.

 
Odpovedať
7.12.2018 22:54
Avatar
Odpovedá 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
 
Odpovedať
7.12.2018 23:02
Avatar
Odpovedá 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.

 
Odpovedať
7.12.2018 23:09
Avatar
Šimon Raichl
Tvůrce
Avatar
Odpovedá 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"
 
Odpovedať
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á :).

 
Odpovedať
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. :)

 
Odpovedať
23.10.2019 21:25
Avatar
Jaroslav Drobek:21.6.2022 5:37

Hodnocení:

  • nebuďme netrpěliví, písmenka jsou zajisté na cestě!
 
Odpovedať
21.6.2022 5:37
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!