双重等于的虚假表达式

时间:2018-11-27 14:20:38

标签: javascript

为什么要执行以下代码:

var foo=10;
foo==true //false

返回假?因为任何数字都是真的,所以不应该是真的吗?

2 个答案:

答案 0 :(得分:2)

这取决于上下文。如果foo如代码中那样初始化

var foo = 10;

然后

if (foo) alert("it's true!");

将触发alert(),因为在这种情况下,if测试只是变量的值,即“真实”值10。

但是,比较foo == true是不同的上下文:这是“抽象”相等操作。在那里,数字和布尔值之间的比较会首先将布尔值转换为数字。根据定义,true变为1。然后进行比较,并且10显然不等于1。

几乎没有理由将表达式值与truefalse进行显式比较。如果要查看某个值是否为“真值”(您知道的值是数字,但您不知道 exact 值),则可以得到与{{1} }测试将获得:

if

var isTruthy = !!foo; 布尔补余运算符两次应用于!的值。第一个应用程序首先将10转换为foo,然后将其转换为true。第二个应用程序将false转换回false,因此true的值将为isTruthy

答案 1 :(得分:1)

在您的比较中,true变成了1,因为foo是一个数字。
检查以下示例代码片段:

var foo = 10;
console.log("foo: " + foo);
console.log(foo==true);

var foo = 1;
console.log("foo: " + foo);
console.log(foo==true);

您可能还想了解严格的比较,这将防止在数字和布尔值之间进行比较以返回true值:

var foo = 1;
console.log("foo: " + foo);
console.log("Regular comparison: " + (foo==true));
console.log("Strict comparison: " + (foo===true));

Link to “Comparison_Operators”