如果var a = true
则a == 1
为true
,a == 2
为false
。为什么?据我所知,在javascript布尔表达式中,0转换为false,1转换为true。但其他整数怎么样呢。为什么会出现上述行为?
答案 0 :(得分:3)
为什么呢?我明白在javascript布尔表达式0中转换为 false和1 casts为true。
因为 Number(true)
=> 1
强>
根据spec of abstract equality expression evaluation
- 如果Type(x)是布尔值,则返回比较结果ToNumber(x)== y。
醇>
因此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
。
答案 3 :(得分:1)
这可能是从二进制世界继承的,这是有道理的,因为二进制0是假的,1是真的。确切地说,这就是在比较时对javascript中的布尔类型进行类型转换的方式。
对于布尔值,只有2种可能,true
或false
。因此,在数字/二进制系统中,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;