Javascript 简单布尔算术
Posted
技术标签:
【中文标题】Javascript 简单布尔算术【英文标题】:Javascript Simple Boolean Arithemetic 【发布时间】:2016-02-18 11:08:02 【问题描述】:我听说过布尔运算并想尝试一下。
alert (true+true===2) //true
alert (true-true===0) //true
所以代数告诉我是真的=1
alert (true===1) //false :O
有人能解释一下为什么会这样吗?
【问题讨论】:
What is exactly the meaning of "===" in javascript?的可能重复 【参考方案1】:===
是严格相等运算符。请改用==
运算符。
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
。
【讨论】:
@SOReadytoHelp 编辑了我的答案。看看吧。【参考方案2】:因为比较数据 TYPE 和值(这就是运算符 '===' 所做的),TRUE 与 1 不完全相同。如果您将其更改为 TRUE == 1,它应该可以正常工作。
【讨论】:
【参考方案3】:一开始,你在做 bool + bool。 + 运算符优先于 === 运算符,因此首先对其进行评估。在此评估中,它将布尔值转换为它们的数字形式。运行console.log(true + true);
,这将返回 2。由于您将数字 2 与数字 2 进行比较,因此您会得到一个严格相等的返回值 true。
当您只是比较 true === 1
时,就像其他人所说的那样,您将布尔值 true 与不严格相等的数字 1 进行比较。
【讨论】:
【参考方案4】:前 2 个表达式为真,因为您正在使用表达式 (true+true)
(true-true)
它首先转换值的类型,因为表达式并使用“===”检查相等性,toNumber
和 toPrimitive
是内部方法转换它们的参数(在表达式期间)这是在表达式期间进行转换的方式
这就是为什么 true+true 等于 2
在您的第三个表达式中,您使用 === 这不是转换参数,只是检查与类型的相等性,使两个值都为真,并且类型必须相同。
就是这样
【讨论】:
很抱歉我当时正在编辑我的答案,true+true 是一个表达式,我附上了图片来解释布尔值在表达式期间如何转换,你知道它是如何工作的吗?跨度>以上是关于Javascript 简单布尔算术的主要内容,如果未能解决你的问题,请参考以下文章