Když je proměnná deklarována bez přiřazení hodnoty, její počáteční hodnota je undefined
.
Jak zkontrolujete, zda je hodnota undefined
v JavaScriptu?
Krátká odpověď
V moderních prohlížečích můžete bezpečně porovnat proměnnou přímo do undefined
:
Někteří lidé argumentují proti srovnání s undefined
protože staré prohlížeče povolily opětovné přiřazení jeho hodnoty takto:
Po tomto opětovném přiřazení ve srovnání s undefined
přímo by již správně nezjistilo, zda byla proměnné přiřazena hodnota.
Toto chování bylo však v roce 2009 opraveno pomocí ECMAScript 5:
V moderních prohlížečích to “ Už není možné znovu přiřadit globální undefined
hodnotu.
Co když potřebuji podporovat IE8 a starší?
Obecně platí, že přímé srovnání s un definované je stále bezpečné. Neexistuje žádný praktický důvod, proč by aplikace měla znovu přiřadit hodnotu undefined
.
Thomas Eding to ukazuje přesvědčivou analogií:
Pokud máte stále obavy, existují dva způsoby, jak zkontrolovat, zda je hodnota nedefinovaná, i když byl globální undefined
přepsán.
Můžete použít operátor void k získání hodnoty undefined
. Toto bude fungovat, i když byla globální window.undefined
hodnota přepsána:
Nula v tomto příkladu nemá žádný zvláštní význam, stejně můžete použít 1
nebo function(){}
. void(anything)
bude vždy vyhodnocen jako undefined
.
Alternativně můžete k bezpečné kontrole hodnoty použít operátor typeof byl přidělen. Místo porovnání s globální undefined
hodnotou zkontrolujete, zda je hodnota typu „undefined“:
Upozorňujeme, že se to mírně liší od předchozích možností. I když by name
nebylo deklarováno typeof
, stále by to bylo nedefinováno. Pokud byste porovnali nedeklarovanou proměnnou s undefined
nebo void(0)
, místo toho byste dostali ReferenceError.
Ale ne použijte přímo void (0)
Nepoužívejte doslovně void(0)
nebo typeof x === "undefined"
doslovně v kódu. Tyto výrazy nejsou samozřejmé a měly by být zabaleny do funkce isUndefined takto:
Mnoho knihoven obslužných programů již má tuto funkci zabudovanou, například existuje _.isUndefined
funkce v Underscore.js.