Javascript true +/- true是假的?

use*_*026 1 javascript

我试图得到一个表达式来测试一个字段是否为null并且处理为false

a=true
b=true
-------------
true

 a=null
 b=true
 -------------
 true
Run Code Online (Sandbox Code Playgroud)

但是当我执行时:

var a=true;
var b=true;
alert((a+b) == true);   => false
Run Code Online (Sandbox Code Playgroud)

它返回false,我不明白.

var a=null;
var b=true;
alert((a+b) == true);   => true
Run Code Online (Sandbox Code Playgroud)

Rob*_*son 6

javascript中的一般解决方案是使用!!解析为布尔值.!!两次否定真实性,产生一个与原始真实性相同的布尔值.

然后,您应该将其&&用作逻辑and操作.

var a=null;
var b=true;
console.log(!!a && !!b);   // false
Run Code Online (Sandbox Code Playgroud)

编辑:关于奇怪+行为的附录

你在使用时所看到的奇怪+之处&&是因为,在JavaScript中,将+布尔与整数,以及true成为1false变成强迫0.

于是

true + true \\ 2
true + false \\ 1
Run Code Online (Sandbox Code Playgroud)

然后在做的时候

true + true == true
Run Code Online (Sandbox Code Playgroud)

在相等比较的左侧解析为2,然后JavaScript强制右侧1,因此相等检查失败.

做的时候

null + true == true
Run Code Online (Sandbox Code Playgroud)

左侧变为整数1,右侧变为整数.

我建议阅读关于Equality比较和相同性MDN指南,了解有关JavaScript的值强制和抽象相等检查的更多信息.