Javascript简单布尔算术

Javascript Simple Boolean Arithemetic

我听说过布尔算术,想试试看。

1
2
alert (true+true===2)  //true
alert (true-true===0)  //true

所以代数告诉我真=1

1
alert (true===1)  //false :O

有人能解释为什么会这样吗?


===是严格的相等运算符。改为使用==运算符。true==1将对true进行评估。

The strict equality operator === only considers values equal if they
have the same type. The lenient equality operator == tries to
convert values of different types, before comparing like strict
equality.

案例1:

true===1的情况下,true的数据类型是布尔值,而1的类型是数字。因此,true===1的表达将对false进行评估。

案例2:

true+true===2true-true===0的情况下,首先执行算术运算(因为+运算符优先于===。请参见运算符优先级),然后将结果与其他操作数进行比较。

在计算表达式(true+true===2)时,算术运算true+true首先产生结果2。然后将结果与另一个操作数进行比较。也就是说,(2==2)将对true进行评估。


一开始,你在做bool+bool。+运算符优先于==运算符,因此首先对其进行计算。在这个评估中,它将布尔值转换为它们的数字形式。运行console.log(true + true);,返回2。由于您将数字2与数字2进行比较,因此会得到一个返回值true,并且严格相等。

当你在比较true === 1时,就像其他人说的那样,你在比较布尔值true和不完全相等的数字1。


前2个表达式是真的,因为您使用的是表达式(true+true)(true-true),它首先根据表达式转换一个值的类型,并用"=="、toNumbertoPrimitive检查相等性,这是转换它们的参数(在表达式中)的内部方法。这是表达式中转换的方式。

enter image description here

这就是为什么真+真等于2

在第三个表达式中,您使用的是==这不是转换参数,只需检查类型是否相等,以使值和类型都为真。

这一切


因为比较数据类型和值(这是运算符"==="所做的),所以true与1不完全相同。如果您将此更改为true==1,它将正常工作。