【问题标题】:Why don't these evaluate the same way? [duplicate]为什么这些评估方式不同? [复制]
【发布时间】:2016-08-17 20:48:15
【问题描述】:

我今天遇到了一个奇怪的问题,我想知道为什么会这样……我的印象是,在 javascript 中,任何没有明确为假(假、0 或 NULL)的东西都会返回真。

在示例 1 中将 console.log() 附加到 isNative 和示例 2 中的 localStorage.getItem(app + ".native_context") 时,两者都返回“false”。然而,当实际运行这些时,示例 1 在这两种情况下都可以工作,但示例 2 无论如何都会返回 true,这让我觉得一切都被接受为 true。

示例 1:

var isNative = localStorage.getItem(app + ".native_context");
if (isNative === "true") {
        //do x
    } else {
        //do y
    }
}

示例 2:

if (localStorage.getItem(app + ".native_context")) {
        //do x
    } else {
        //do y
    }
}

谁能解释发生了什么?我很想知道。

【问题讨论】:

  • 如果它包含一个字符串"false",那么它是一个非空字符串,它是真实的。
  • 字符串不是布尔值。
  • 我们不知道localStorage.getItem(app + ".native_context") 的评估结果。显然它不是字符串“true”。
  • isNative === "true" 检查 isNative 是否是一个与 "true" 完全一样的字符串。这些例子完全不相关
  • 哇,不知道我怎么没注意到。我的错。谢谢@Juhana

标签: javascript


【解决方案1】:

大多数字符串都是“真实”的值:

if('false') {
  alert('A string is usually truthy!');
}

【讨论】:

  • 我将代码复制到另一个文件中,所以我什至没有注意到表示字符串的引号,哎呀
【解决方案2】:

在第一种情况下,您正在严格检查值为'true' 的字符串,在第二种情况下,您正在检查任何truthy 值,

truthy values and falsy explanation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    • 2017-10-28
    • 2013-10-20
    • 2014-06-24
    相关资源
    最近更新 更多