【发布时间】:2011-07-26 17:30:34
【问题描述】:
在 JavaScript 中 undefined 可以重新分配,因此通常建议创建一个自执行函数来确保未定义实际上是未定义的。作为替代null 和undefined 绝对是==,但是否有任何其他值大致等同于null/undefined?
TLDR
基本上你可以安全地替换这个:
(function(undefined){
window.f = function(obj){
if(obj===undefined || obj===null ){
alert('value is undefined or null');
}
}
})();
与:
window.f = function(obj){
if(obj==null){
alert('value is undefined or null');
}
}
如果以上内容是 100% 安全的,为什么 JavaScript 社区/库不完全删除 undefined 并使用较短的 x == null 条件来同时检查 null/undefined?
编辑:
我从未见过有人实际上用“未定义”与null 代表“未知值”?我从未见过这种情况,这就是我最初问这个问题的原因。它只是看起来是两个令人难以置信的混淆值,它们从未在其原始意图中使用过。将所有内容标准化以进行比较obj==null 将有利于大小并避免重新分配的任何问题。一切都会继续工作
var obj={};
obj.nonExistantProperty==null // true
var x;
ix==null // true
function(obj){
obj==null // true
}
此规则的一个例外似乎是在将undefined/null 转换为整数时。这是一个很老的案例场景,但绝对应该注意。
+(null)==0
尽管
isNaN(+undefined)
考虑到 NaN 是 JavaScript 中唯一不等于自身的值,您可以做一些非常疯狂的事情,例如:
+undefined == +undefined // false
+null == +null // true
使用null 作为松散相等== drop 代替undefined 是安全的,前提是您不打算将值强制转换为整数。这是一个非常极端的情况。
【问题讨论】:
标签: javascript null undefined