W JavaScript undefined
można ponownie przypisać, dlatego często zaleca się utworzenie funkcji self executing, która zapewnia, że undefined jest rzeczywiście niezdefiniowany. Alternatywnie, null
i undefined
są zdecydowanie ==
, ale czy są jakieś inne wartości luźno równoważne z null/undefined
?JavaScript undefined zastąpiony wartością null
TLDR
Zasadniczo można bezpiecznie zastąpić to:
(function(undefined){
window.f = function(obj){
if(obj===undefined || obj===null){
alert('value is undefined or null');
}
}
})();
z:
window.f = function(obj){
if(obj==null){
alert('value is undefined or null');
}
}
Jeśli powyższe jest w 100% bezpieczne, to dlaczego nie wspólnota JavaScript/biblioteki upuść undefined
w ogóle i użyć krótszego warunku, aby od razu sprawdzić oba atrybuty: null
/?
EDIT:
Nigdy nie widziałem kogoś faktycznie stanowią "nieznaną wartość" z 'niezdefiniowane' vs null
? Nigdy nie widziałem tego scenariusza i dlatego pierwotnie zadałem to pytanie. Wydaje się, że są to dwie niewiarygodnie zdezorientowane wartości, które nigdy nie są używane w pierwotnym zamyśle. Standaryzacja wszystkiego w celu porównania obj==null
byłaby korzystna dla rozmiaru i uniknięcia problemów z ponownym przypisaniem. Wszystko będzie nadal pracować
var obj={};
obj.nonExistantProperty==null // true
var x;
ix==null // true
function(obj){
obj==null // true
}
Jedynym wyjątkiem od tej reguły wydaje się być przy odlewaniu undefined
/null
do liczby całkowitej. Jest to całkiem odpowiedni scenariusz wiekowy, ale na pewno należy go odnotować.
+(null)==0
podczas isNaN(+undefined)
Zważywszy NaN jest jedyną wartością w JavaScript nie jest równe sobie, można zrobić pewne dość szalone rzeczy, jak:
+undefined == +undefined // false
+null == +null // true
Korzystanie null
jako luźny równość ==
spadku zamiennik dla undefined
jest bezpieczny, pod warunkiem, że nie planujesz rzutowania wartości na liczbę całkowitą. Co jest scenariuszem całkiem nielicznych przypadków.
Równie dobrze można użyć 'null' w powyższym kodzie, używając' void 0'. Mogę również argumentować, że 'null' jest nieco łatwiejsze do odczytania i wpisz' void 0'. Chodzi mi o to, że wydaje się, że nie ma żadnej wartości w rozróżnianiu między nimi. Chociaż niezdefiniowane ma reprezentować "nieoszacowaną wartość", nikt nie trzyma się tej konwencji. Tak więc korzystne byłoby zignorowanie 'undefined' każdego istniejącego i po prostu użycie' obj == null' w jego miejsce. – William
@Lime, zobacz moje zmiany. –
Dzięki, nie byłem świadomy, jakie wartości były, gdy są rzutowane na liczby całkowite. Posiadanie 'NaN' vs' 0' jest zdecydowanie inne. Wygląda na to, że '[null] .join ('')' i '[undefined] .join ('')' są równoważne. – William