【问题标题】:Javascript Simple Boolean ArithemeticJavascript 简单布尔算术
【发布时间】:2016-02-18 11:08:02
【问题描述】:

我听说过布尔运算并想尝试一下。

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

所以代数告诉我是真的=1

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

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

【问题讨论】:

标签: javascript


【解决方案1】:

=== 是严格相等运算符。请改用== 运算符。 true==1 将评估为 true

严格相等运算符=== 只考虑值相等,如果它们 有相同的类型。宽松的相等运算符== 试图 在严格比较之前转换不同类型的值 平等。

案例 1:

true===1 的情况下,true 的数据类型是布尔值,而 1 的类型是数字。因此表达式true===1 的计算结果为false

案例 2:

true+true===2true-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) 它首先转换值的类型,因为表达式并使用“===”检查相等性,toNumbertoPrimitive 是内部方法转换它们的参数(在表达式期间)这是在表达式期间进行转换的方式

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

      在您的第三个表达式中,您使用 === 这不是转换参数,只是检查与类型的相等性,使两个值都为真,并且类型必须相同

      就是这样

      【讨论】:

      • 很抱歉我当时正在编辑我的答案,true+true 是一个表达式,我附上了图片来解释布尔值在表达式期间如何转换,你知道它是如何工作的吗?跨度>
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多