我正在尝试获取一个表达式来测试一个字段是否为null并且处理为false
a=true
b=true
-------------
true
a=null
b=true
-------------
true
但是当我执行时:
var a=true;
var b=true;
alert((a+b) == true); => false
它返回false,我不明白。
var a=null;
var b=true;
alert((a+b) == true); => true
答案 0 :(得分:6)
javascript中的一般解决方案是使用!!
解析为布尔值。 !!
两次否定真实性,导致布尔值与原始真实性相同。
然后,您应该使用&&
作为逻辑and
操作。
var a=null;
var b=true;
console.log(!!a && !!b); // false
+
行为使用+
代替&&
时所看到的陌生感是因为,在JavaScript中,+
将布尔值强制转换为整数,true
成为1
}和false
成为0
。
因此
true + true \\ 2
true + false \\ 1
然后在做
时true + true == true
等式比较的左侧解析为2
,然后JavaScript将右侧强制转换为1
,因此等式检查失败。
做的时候
null + true == true
左侧变为整数1
,然后是右侧。
我建议您阅读MDN guide on Equality comparisons and sameness以获取有关JavaScript的值强制和抽象相等检查的更多信息。
答案 1 :(得分:2)
var a = true;
var b = true;
console.log((a & b) === 1);
var c = null;
console.log((a & c) === 1);
true == 1
这个很重要。将true转换为数字时,它将为1
然后true + true == true
变为2 == 1
这是false
同样null + true == true
变为1 == 1
,这是正确的,因为null
已解析为0
我认为你要以错误的方式测试null
。
尝试
alert((a & b) === 1);
答案 2 :(得分:1)
对于null和true,测试为true,你可能会这样做:
!null === true
这可能会为您解决。
答案 3 :(得分:1)
很简单。当您尝试进行+操作时,true
就像1,而false
就像0.然后,如果你使true+true
得到2而两个不是1,那么它不是{{ 1}}。