在JavaScript中,undefined
可以重新分配,所以通常建议创建一个自执行函数,以确保undefined实际上未定义。作为替代方案,null
和undefined
肯定是==
,但其他任何值大致等于null/undefined
?将JavaScript undefined替换为null
(function(undefined){
window.f = function(obj){
if(obj===undefined || obj===null){
alert('value is undefined or null');
}
}
})();
有:
TLDR
基本上你能安全地更换此
window.f = function(obj){
if(obj==null){
alert('value is undefined or null');
}
}
如果上面是100%安全的,为什么不JavaScript社区/库下降undefined
,并使用较短的x == null
有条件同时检查null
/undefined
?
编辑:
我从来没有见过有人真正代表 “未知值” 与 '未定义' VS 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)
考虑楠在JavaScript中唯一的价值不等于本身,你可以做一些很疯狂的事情,如:
+undefined == +undefined // false
+null == +null // true
使用null
作为一个松散的平等==
下降替代undefined
是安全的,前提是您不打算将该值转换为整数。这是一个相当优势的情况。
你可以像使用'void 0'一样在上面的代码中简单地使用'null'。我也可以争辩说'null'稍微容易阅读,然后输入'void 0'。我的观点是,区分两者似乎没有价值。尽管未定义应该表示“未知价值”,但没有人真正认可这一惯例。因此,忽略每个存在的“未定义”似乎是有益的,只需使用obj == null即可。 – William
@Lime,请参阅我的编辑。 –
谢谢,我不知道什么价值时被转换为整数。 “NaN”与“0”绝对不同。它看起来'[null] .join('')'和'[undefined] .join('')'是等同的。 – William