我听说过布尔算术,想过尝试一下。
alert (true+true===2) //true
alert (true-true===0) //true
所以代数告诉我true = 1
alert (true===1) //false :O
有人可以解释为什么会这样吗?
答案 0 :(得分:4)
===
是严格的相等运算符。请尝试使用==
运算符。
true==1
将评估为true
。
严格等于运算符
===
只考虑它们相等的值 有相同的类型。宽松等于运算符==
尝试 在比较严格之前转换不同类型的值 平等。
案例1:
在true===1
的情况下,数据类型true是布尔值,而类型1是数字。因此,表达式true===1
将评估为false
。
案例2:
如果true+true===2
和true-true===0
首先执行算术运算(因为+
运算符优先于===
。See Operator Precedence),然后结果与其他操作数进行比较。
在计算表达式(true+true===2)
时,算术运算true+true
首先执行生成结果2.然后结果与另一个操作数进行比较。即(2==2)
将评估为true
。
答案 1 :(得分:1)
因为比较数据类型和值(这是运算符'==='所做的),TRUE与1不完全相同。如果将其更改为TRUE == 1,它应该可以正常工作。
答案 2 :(得分:1)
前2个表达式为真,因为您使用表达式(true+true)
(true-true)
它首先转换值的类型,因为表达式并检查与“===”,toNumber
和{的相等性{1}}是转换其参数的内部方法(在表达式期间),这是在表达式
这就是为什么true + true等于2
在你的第三个表达式中,你正在使用 === 这不转换参数只检查与类型相等,使两个值都为真,并且类型必须相同。
多数人
答案 3 :(得分:1)
一开始,你正在做bool + bool。 +运算符优先于===运算符,因此首先计算它。在此评估中,它将布尔值转换为数字形式。运行console.log(true + true);
,这将返回2.由于您将数字2与数字2进行比较,因此您将获得具有严格相等性的返回值true。
当你只是比较true === 1
时,就像其他人说的那样,你将布尔值true与数字1进行比较,而这个数字并不严格相等。