【问题标题】:Why does the second if-statement behave like this? [duplicate]为什么第二个 if 语句的行为是这样的? [复制]
【发布时间】:2021-02-02 07:12:56
【问题描述】:

第一种情况会执行,而后一种情况不会。 你能给我解释一下吗?

function foo() {
  return "bar";
}

if (foo()) {
  console.log("This works!");
}

if (foo() == true) {
  console.log("This does not work!");
}

【问题讨论】:

  • 字符串"bar" 是一个真实值,但不等于布尔值true

标签: javascript boolean


【解决方案1】:

第一种情况 foo() 被隐式转换为布尔值,例如 if(Boolean(foo())),它等于 if(Boolean("bar")),其中任何长度大于 0 的字符串都将转换为 true(考虑为 truthy 值)

在第二种情况下,您将"bar"true 进行比较,其中== 将尝试将一种值类型转换为另一种值类型,它将失败,这就是为什么在第二种情况下它被评估为false

p>

您可以阅读ydkjs预订完整说明

【讨论】:

    【解决方案2】:
    function foo() {
      return "bar";
    }
    

    这个函数返回一个变量类型“bar”

    if (foo() == true) {
      console.log("This does not work!");
    }
    

    由于我们不确定 foo() 返回的变量类型,所以比较将不起作用 //if (foo() == true) {

    找出函数返回的变量类型,并进行必要的比较

    HTH traja47

    【讨论】:

    • "由于我们不确定 foo() 返回的变量类型,所以比较将不起作用" 在运行代码之前,比较不会根据函数的内容进行可能返回。它是根据它所做 返回的内容来完成的。 foo = () => Math.random() < 0.5 ? true : "bar" 也会让我们不确定返回值是什么,但这不会影响比较 - 如果返回 true,那么 true == true 仍然是`true。
    • 不要为函数返回值混合不同的变量类型;坚持布尔; HTH traja47
    猜你喜欢
    • 2019-09-02
    • 1970-01-01
    • 2012-08-09
    • 2019-11-06
    • 2014-01-16
    • 2021-12-23
    • 2017-01-26
    • 2014-12-28
    • 1970-01-01
    相关资源
    最近更新 更多