Javascript 为什么;严格的;未定义与错误时的测试
我有一个这样的物体:Javascript 为什么;严格的;未定义与错误时的测试,javascript,Javascript,我有一个这样的物体: 函数doit(){ var电流_模块={ alt:错, 移位:假 }; var required_mods={}; for(当前_mods中的变量modname){ if(当前的_mods[modname]!=必需的_mods[modname]){ 警报(“不匹配”); 返回; } } 警报(“匹配”); } doit()关于==和的规则=比较说明,当两个不同类型的值中有一个是布尔值时,应通过将布尔值转换为数字然后继续进行比较。因此,您的false将转换为0,并将比较视为
函数doit(){
var电流_模块={
alt:错,
移位:假
};
var required_mods={};
for(当前_mods中的变量modname){
if(当前的_mods[modname]!=必需的_mods[modname]){
警报(“不匹配”);
返回;
}
}
警报(“匹配”);
}
doit()代码>关于==
和的规则=代码>比较说明,当两个不同类型的值中有一个是布尔值时,应通过将布尔值转换为数字然后继续进行比较。因此,您的false
将转换为0
,并将比较视为
undefined != 0
这反过来会在比较过程结束时下降到默认结果false
测试对象属性值是一个复杂的过程,因为当属性根本不存在,或者当属性存在但没有值时,像obj[prop]
这样的表达式将计算为undefined
。根据需要,您可以将
中的运算符与值测试结合使用:
if (modname in required_mods) {
if (current_mods[modname] !== required_mods[modname])
alert("value mismatch");
}
else
alert("property " + modname + " missing");
这两个值都是假的并不意味着它们相等
根据ECMAScript规范(),undefined
不等于false
它们并不都是false。未定义等于零,甚至不等于未定义不确定为什么这个问题被否决。写得很好你在这个网站上的名声太大了,因为这样一个基本问题可以通过在你的浏览器控制台中键入undefined==false来回答…啊,@AndréDion,我明白了now@bub他们确实都是“虚伪的”,但这并不重要。在=
的规则下,未定义是==`to本身和null
@Noitidart,注意未定义==undefined
是真的
,正如未定义==null
一样。感谢pointy的提示,我刚刚测试并实现了它。所以对于我上面的例子,我应该使用的if是:if(!current_mods[modname]!=!required_mods[modname]){
if(!!current_mods[modname]!=!!required_mods[modname])
@Noitidart!!
向boolean@Noitidart嗯,我不确定这是不是一个好的解决方案;!!
将把所有的truthy值转换为true
,而这似乎不是您为代码设定的目标。