Javascript true +/- true是假的?

时间:2017-08-27 16:53:39

标签: javascript

我正在尝试获取一个表达式来测试一个字段是否为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

4 个答案:

答案 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}}。