如果var a = true则a == 1为真,但a == 2为假。为什么?

时间:2018-02-07 09:56:59

标签: javascript

如果var a = truea == 1truea == 2false。为什么?据我所知,在javascript布尔表达式中,0转换为false,1转换为true。但其他整数怎么样呢。为什么会出现上述行为?

6 个答案:

答案 0 :(得分:3)

  

为什么呢?我明白在javascript布尔表达式0中转换为   false和1 casts为true。

因为 Number(true) => 1

根据spec of abstract equality expression evaluation

  
      
  1. 如果Type(x)是布尔值,则返回比较结果ToNumber(x)== y。
  2.   

因此a 首先被强制转换为数字,然后与1进行比较。

答案 1 :(得分:2)

当你在js中使用==或!=时,操作数将在进行比较之前转换为相同的类型。转换时:

如果有布尔值,则true将变为1,false将变为0;

    var a = true;
    a == 1;// a turned to 1 before compare,so true
    a == 2;// a turned to 1 before compare,so false

答案 2 :(得分:1)

这与胁迫有关。在a == 1方案中,a被强制转换为一个整数,以便再次进行比较1,true被强制转换为1。在第二个示例中,a再次被强制转换为1,因此它不等于2

Further reading on coercion

答案 3 :(得分:1)

这可能是从二进制世界继承的,这是有道理的,因为二进制0是假的,1是真的。确切地说,这就是在比较时对javascript中的布尔类型进行类型转换的方式。

对于布尔值,只有2种可能,truefalse。因此,在数字/二进制系统中,0和1很容易代表它们。

答案 4 :(得分:1)

您可以将x转换为1,将True转换为True但您无法将其他数字转换为1

答案 5 :(得分:0)

因为0 =假,1 =真。布尔值只有两个值:true / false。那么2应该是什么?

var没有类型,它可以是一切。请同时考虑== vs ===运算符。

var x = 1;
console.log(x === true);
console.log(x == true);
x = 2;
console.log(x === true);
console.log(x == true);
x = 0;
console.log(x === false);
console.log(x == false);
x = -1;

请参阅示例:http://jsfiddle.net/2aqGS/146/