【发布时间】:2016-02-18 11:08:02
【问题描述】:
我听说过布尔运算并想尝试一下。
alert (true+true===2) //true
alert (true-true===0) //true
所以代数告诉我是真的=1
alert (true===1) //false :O
有人能解释一下为什么会这样吗?
【问题讨论】:
标签: javascript
我听说过布尔运算并想尝试一下。
alert (true+true===2) //true
alert (true-true===0) //true
所以代数告诉我是真的=1
alert (true===1) //false :O
有人能解释一下为什么会这样吗?
【问题讨论】:
标签: javascript
=== 是严格相等运算符。请改用== 运算符。
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。
【讨论】:
因为比较数据 TYPE 和值(这就是运算符 '===' 所做的),TRUE 与 1 不完全相同。如果您将其更改为 TRUE == 1,它应该可以正常工作。
【讨论】:
一开始,你在做 bool + bool。 + 运算符优先于 === 运算符,因此首先对其进行评估。在此评估中,它将布尔值转换为它们的数字形式。运行console.log(true + true);,这将返回 2。由于您将数字 2 与数字 2 进行比较,因此您会得到一个严格相等的返回值 true。
当您只是比较 true === 1 时,就像其他人所说的那样,您将布尔值 true 与不严格相等的数字 1 进行比较。
【讨论】: