我现在很困惑!JavaScript中的运算符.我的理解是!运算符仅对布尔运算.但是对我的一个答案的评论说它可以对任何东西进行操作并返回一个布尔值,这在我做了一些测试后恰好是真的.
alert(!undefined); //true
alert(!function(){}); //false
alert(!{}); //false
alert(!null); //true
alert(!()); //crash
alert(!"false"); //false
alert(!false)?;???????????? //true??????????????????
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我概括一下行为!运营商.
编辑
更令人困惑的事情:
?alert( new String() == ""); //true
alert(!""); //true
alert(! new String()); //false
Run Code Online (Sandbox Code Playgroud)
怎么样?
如果我们alert(null==undefined)输出到true.
这是什么原因.
这是在javascript中硬编码的东西还是有解释.
在JavaScript undefined中可以重新分配,因此通常建议创建一个自执行函数,以确保undefined实际上是未定义的.作为一种替代方案null,undefined肯定==是其他任何价值相当于null/undefined?
基本上你可以安全地替换这个:
(function(undefined){
window.f = function(obj){
if(obj===undefined || obj===null ){
alert('value is undefined or null');
}
}
})();
Run Code Online (Sandbox Code Playgroud)
有:
window.f = function(obj){
if(obj==null){
alert('value is undefined or null');
}
}
Run Code Online (Sandbox Code Playgroud)
如果以上是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
}
Run Code Online (Sandbox Code Playgroud)
此规则的一个例外似乎是在转换undefined/ null到整数时.这是一个相当年龄的情况,但绝对应该注意.
+(null)==0
而 …