【问题标题】:Why does '1' == true return true, yet '2' == true return false in Javascript [duplicate]为什么'1' == true 返回true,而'2' == true 在Javascript中返回false [重复]
【发布时间】:2019-12-07 01:05:59
【问题描述】:

我对 Javascript 还很陌生,我想知道为什么 '1' == true 返回 true 而 '2' == true 返回 false。来自Java背景,Javascript中的类型强制一直很难掌握

【问题讨论】:

标签: javascript


【解决方案1】:

我的回答基于this table

在您的示例中,操作数 A 是字符串,操作数 B 是布尔值。然后它对它们都调用 ToNumber 并比较它们是否严格 (===) 相等。

ToNumber('2') === 2,但是ToNumber(true) === 1,所以两者不相等。

更深入的实现解释是here

【讨论】:

  • 为什么,当 A 是一个字符串而 B 是一个布尔值时,它决定调用 'ToNumber' 来决定相等性,而不是说,'toString'?
  • 因为这是他们在编写标准时决定的,这就是它的全部内容。您可以阅读 equality 上的技术标准部分,尽管它并没有太多启发性。
  • 我现在明白了。感谢@CalvinGodfrey 的启发
【解决方案2】:

基本上归结为 Javascript 中的真值和假值。

因为你的比较是用 == 完成的,这基本上意味着只是价值比较。

在 Javascript 中,true 等于 1,就像 false 等于 0 一样。此外,鉴于你使用 == 而不是 ===,它与 1 == '1' 但 1 !== '1' 相同。

【讨论】:

  • 非常感谢。再清楚不过了
猜你喜欢
  • 1970-01-01
  • 2019-01-09
  • 2021-11-10
  • 2018-01-31
  • 2023-01-16
  • 1970-01-01
  • 1970-01-01
  • 2017-07-29
  • 2015-10-03
相关资源
最近更新 更多