【问题标题】:Why `1 > undefined` evaluates to false? [duplicate]为什么`1 > undefined`评估为假? [复制]
【发布时间】:2019-03-25 07:46:01
【问题描述】:

我在尝试解决编码挑战时尝试做出一些条件语句。我一直在跟踪不同对象中两个字符串的所有字母的出现。当我尝试通过它们的计数来比较它们时,如果另一个对象中的计数未定义,即使第一个值是真实的,它也会评估为 false。

但是;

1 > Boolean(undefined) 计算结果为真。但是 1 > undefined 的计算结果为 false。这种行为有什么原因吗?

【问题讨论】:

  • 你为什么不控制台登录Boolean(undefined)
  • @trincot 它评估为假。在这种情况下 1 > Boolean(undefined) 计算结果为真。
  • 这让你吃惊吗?在许多编程语言中,与数字相比,false 被视为 0。
  • 令我惊讶的是 1 > undefined 的计算结果为 false。
  • 如果你的问题是关于1 > undefined,你为什么说它是1 > Boolean(undefined)

标签: javascript


【解决方案1】:

当您将通常不应该比较的事物进行比较时,Javascript 会进行很多时髦的转换。

1>undefined 将 undefined 强制转换为 NaN,并且您无法将数字与 Not a Number 进行比较,因此任何比较都将返回 false >,<,==

当你做1>Boolean(undefined) undefined 被强制转换为它的布尔值equivalent false,然后当它被比较时它将被强制转换为0,你可以通过Number(Boolean(undefined)) 来确认这一点,因为1大于0它返回真的。

【讨论】:

    【解决方案2】:

    为了使用比较运算符>,两个操作数都必须是数字。 1 已经存在,因此必须将 Boolean(undefined)(其计算结果为 false)转换为数字。如果是,你会得到0

    // First, convert undefined to a Boolean
    let bool = Boolean(undefined)
    console.log(bool);
    
    // Then convert that to a number
    let num = Number(bool);
    console.log(num);

    所以,1 > 0true

    需要了解的事项:

    JavaScript 是 "loosely" or "weakly" typed language。这意味着数据可以并且经常被隐式转换(强制)为不同的类型类别。

    所有数据都可以归类为"truthy""falsy",也就是说如果转换为布尔值,会转换为truefalsenullundefined""0falseNaN 之类的东西都是“虚假的”。 JavaScript(和大多数其他语言)中的false 转换为数字0,而true 通常转换为1

    【讨论】:

      猜你喜欢
      • 2017-12-21
      • 1970-01-01
      • 2018-07-01
      • 1970-01-01
      • 2019-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多