Devel.cz Lupa Měšec Podnikatel Root Zdroják.cz DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

JavaScriptové perličky: [] není []!

Na serveru WTFJS upozornil @remi na jednu zajímavost ohledně vytváření neinicializovaných proměnných v JavaScriptu.

var a = new Number;
a == 0 // true
var a = new String;
a == "" // true
var a = new Object;
a == {} // false
var a = new Array;
a == [] // false

Pokud implicitně nezadáme hodnotu pro číslo, je dosazena nula (0), pro řetězec prázdný řetězec (""). Poněkud matoucí to může být při použití zápisu JSON:

var a = {};
a == {} // false
var a = [];
a == [] // false

Předchozí zprávička Následující zprávička        
mmmmario aura:46
14. 6. 2010 0:26 Nový

Javascript

celé vlákno

A bude platit toto:
var a = []
a == null // true?
var a = {}
a == null // true?

pas
pas (neregistrovaný) ---.net.upc.cz
14. 6. 2010 0:31 Nový

Re: Javascript

celé vlákno

Ne.
Stačí si uvědomit, že [] je jenom zkrácený zápis pro new Array() a {} je zkrácený zápis pro new Object() a bude vše jasné.

pas
pas (neregistrovaný) ---.net.upc.cz
14. 6. 2010 0:27 Nový

neinicializované proměnné?

celé vlákno

To ale není o neinicializo­vaných proměnných – ve všech těch příkladech inicializované jsou. :) Je to o vnímání {} jako atomické hodnoty, namísto instance třídy. Jakmile by to bylo zapsáno ekvivalentním new Object() == new Object(), už by to každého trklo. Jinak bych nepovažoval za smrtelný hřích používat neinicializované proměnné – pokud daný jazyk, resp. implementace, jasně zaručuje, jaké jsou výchozí hodnoty pro každý typ.

DevelX
DevelX (neregistrovaný) 89.103.167.---
14. 6. 2010 9:14 Nový

Jednoduché hodnoty vs objekty.

celé vlákno

Nič proti, ale čísla a reťazce sú v JS atomické hodnoty, pri porovnaní == sa porovnávajú ich hodnoty.
Oproti tomu objekt aj pole je inštanciou triedy objektu / pola, a teda sa pri použití == porovná rovnosť referencie na inštanciu. Nechápem, čo je na tom zarážajúce, takto by to predsa aj malo byť.
Pri každom použití [] alebo {} sa zo zjavných príčin vytvára nové pole / objekt.

juraj
juraj (neregistrovaný) 94.136.139.---
17. 6. 2010 15:44 Nový

podobne NaN

celé vlákno

Snáď ešte zmienim NaN == NaN – tiež false.

Zasílat nově přidané příspěvky e-mailem        

Přehled názorů

Javascript
mmmmario 14. 6. 2010 00:26
└ 
Re: Javascript
pas 14. 6. 2010 00:31
neinicializované proměnné?
pas 14. 6. 2010 00:27
Jednoduché hodnoty vs objekty.
DevelX 14. 6. 2010 09:14
podobne NaN
juraj 17. 6. 2010 15:44