Jak zjistit, zda není v JavaScriptu definováno

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.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *