Ha egy változót érték nélkül rendelünk be, akkor a kezdeti értéke undefined
.
Hogyan ellenőrizheti, hogy az érték undefined
a JavaScriptben?
A rövid válasz
A modern böngészőkben biztonságosan összehasonlíthatja a változót közvetlenül a következőhöz: undefined
:
Vannak, akik a undefined
, mert a régi böngészők így engedélyezték az érték újbóli hozzárendelését:
Az új hozzárendelés után összehasonlítva a undefined
közvetlenül már nem észleli helyesen, hogy egy változóhoz van-e rendelve érték.
Ezt a viselkedést azonban 2009-ben kijavították az ECMAScript 5 használatával:
A modern böngészőkben ” már nem lehet újból hozzárendelni a globális undefined
értéket.
Mi van, ha támogatnom kell az IE8 és régebbi verziókat?
Általában közvetlenül összehasonlítva az un meghatározott még mindig biztonságos. Nincs gyakorlati oka annak, hogy egy alkalmazás újból hozzárendelje a undefined
értékét.
Thomas Eding ezt meggyőző hasonlattal bizonyítja:
Ha továbbra is aggódik, kétféleképpen ellenőrizheti, hogy egy érték nincs-e meghatározva, még akkor is, ha a globális undefined
felül lett írva.
Használhatja a void operátor a undefined
értékének megszerzéséhez. Ez akkor is működik, ha a globális window.undefined
értéket túlírják:
A nulla ebben a példában nincs különösebb jelentéssel, ugyanúgy használhatja a 1
vagy a function(){}
. A void(anything)
mindig a következőt értékeli: undefined
.
Alternatív megoldásként a typeof operátorral biztonságosan ellenőrizheti, hogy van-e érték kijelölték. A globális undefined
érték összehasonlítása helyett ellenőrizze, hogy az s típus értéke “undefined”:
Ne feledje, hogy ez kissé eltér az előző lehetőségektől. Még akkor is, ha a name
nem “t deklarált” typeof
, akkor is meghatározatlan. Ha egy be nem jelentett változót összehasonlítana a undefined
vagy a void(0)
változóval, akkor inkább egy ReferenceError-t kapna.
De ne ” közvetlenül használja a void (0)
Kerülje a void(0)
vagy typeof x === "undefined"
szóhasználatot a kódban. Ezek a kifejezések önmagukban nem magyarázhatók, és egy ilyen isUndefined funkcióba kell csomagolniuk:
Sok segédkönyvtárban már be van építve ez a funkció, például van egy _.isUndefined
funkció az Underscore.js fájlban.