Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

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
Posledné komentáre sú na spodnej časti poslednej stránky.
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.

Avatar
David Hartinger
Vlastník
Avatar
Odpovedať
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
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.

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
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.

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"
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á :).

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

Avatar
Jaroslav Drobek:21.6.2022 5:37

Hodnocení:

  • nebuďme netrpěliví, písmenka jsou zajisté na cestě!
Posledné komentáre sú na spodnej časti poslednej stránky.
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.

Zobrazené 10 správy z 17.