【问题标题】:What are boolean evaluation rules in Javascript? [duplicate]Javascript 中的布尔求值规则是什么? [复制]
【发布时间】:2012-10-07 12:05:13
【问题描述】:

可能重复:
Why does (‘0’ ? ‘a’ : ‘b’) behave different than (‘0’ == true ? ‘a’ : ‘b’)

我目前正在学习 Javascript,到目前为止,我对该语言感到满意。

今天早上,在写测试的时候,我意识到一些我无法解释的事情:

当评估布尔表达式时,我们有:

// a && b returns b in case a && b are evaluated to true: OK
'2' && '3' => '3'
'3' && '2' => '2'

// a && b returns a in case a is evaluated to false, b otherwise: OK
false && '' => false
'' && false => ''

// '' and '0' are evaluated to false in a boolean context: OK
'' == false => true
'0' == false => true

// Here is the "problem":
'' && '0' => '' // To be expected: both operands evaluate to false
'0' && '' => '' // What ?!!

所以我的问题很简单:为什么'0' && '' 返回''

我希望两个操作数的计算结果都为 false,但在这种情况下 '0' 似乎没有。为什么会这样?

【问题讨论】:

  • MDN 似乎提供了一个很好的解释:developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/…Boolean('0') == true 出于某种原因。
  • @AndreKR:这个问题确实回答了我的问题。感谢您的链接。也投票关闭。
  • @OldPro:没有冒犯,但是,您引用的问题实际上与表达的问题无关。我的问题是关于同一运算符 && 的不同行为,具体取决于操作数,而另一个问题是关于 &&|| 运算符之间的区别。
  • @ereOn,对不起,我浏览了你的问题,发现你不明白为什么 '0' && '' => '' 并错过了你不明白 '0' 是真实的。我现在看到您的基本困惑来自产生 '0' == false => true 的极其令人困惑的 == 运算符。

标签: javascript boolean


【解决方案1】:

'' 是一个虚假值,而'0' 不是一个虚假值。

(在尝试'0' == false 时,== 会进行类型转换,因此它返回 true。)

【讨论】:

  • 那么当使用== 时,为什么“非假”值会评估为false
  • 你现在知道了,但是为了以后的读者,'0' == falsetrue 因为两者都被转换为数字以供 == 运算符进行比较,所以比较结果是 @ 987654330@.
猜你喜欢
  • 1970-01-01
  • 2010-11-20
  • 2023-04-10
  • 2011-01-29
  • 1970-01-01
  • 1970-01-01
  • 2011-03-17
  • 2019-05-12
相关资源
最近更新 更多