【问题标题】:Why is 'false' truthy in javascript?为什么javascript中的“假”真实?
【发布时间】:2015-09-22 15:09:30
【问题描述】:

我知道空字符串在 javascript 中是虚假的,非空字符串在 javascript 中是真实的。

但是,为什么 'false' 在 javascript 中是真的,规范中有什么明确的吗?这是性能问题还是在某些情况下您希望字符串 'false' 代表 true

【问题讨论】:

  • 非空字符串是真实的,无论它包含什么字符
  • @FrédéricHamidi 你能补充一下这个答案吗,很多答案是什么,而不是原因。
  • 请注意,大多数允许字符串“真”/“假”值的语言尝试实际解析字符串。即使在 Bash 中,false 是一个始终返回非零错误代码的命令,双括号 if 构造仍然将字符串 false 评估为“真实”:if [[ false ]]; then echo ha; fi。只有 Perl 会在这种转换 可能 有意义时尝试将字符串视为数字,在确定字符串的“真实性”时,它实际上会关心字符串的内容,即使存在 "false" 也不考虑错误("0""undef" 是)。

标签: javascript casting boolean truthiness


【解决方案1】:

规范中有什么明确的吗?

Yes:

如果参数是空字符串(其长度为零),则结果为假;否则结果为真。

【讨论】:

    【解决方案2】:

    回复你问题的最后一部分:

    在某些情况下,您希望字符串 'false' 代表真实?

    假设我正在测试用户输入中的空字符串。为此,我发出:

    if (!theInput) {
        // Do something.
    }
    

    现在,如果用户在文本框中输入false,我是否希望该条件为真?当然,我没有。

    【讨论】:

      【解决方案3】:

      在 Javascript 中,任何非空字符串都是真实的。

      因此,当评估任何非空字符串时,即使字符串本身是'false',也会得到true

      您可以阅读有关truthyfalsy 值的更多信息。

      如果你想检查一个字符串的真实性,你可以检查它的长度。

      var val = str.length > 0;
      

      【讨论】:

        【解决方案4】:

        非空字符串的值始终为真。

        Boolean(false) 返回错误

        Boolean('false') 返回真

        【讨论】:

          【解决方案5】:

          根据定义。它是一个字符串,它是这样处理的。不管字符串的含义。

          如果你的逻辑会被应用。那么下面的例子呢:

          "1+3==2"
          "humans have four eyes"
          

          它们也是假的吗?

          【讨论】:

            【解决方案6】:

            如果考虑布尔值,则 false 为 false,true 为 true。

            Boolean(true) //returns true
            Boolean(false) //returns false
            

            但是当您谈论诸如“真”和“假”之类的字符串或任何其他非空字符串时,Javascript 不会将它们读取为布尔值,它们将像所有其他非空字符串一样为真。

            Boolean('true') //returns true
            Boolean('false') //returns true
            Boolean('blahblahblah') //returns true
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2020-09-04
              • 2018-07-01
              • 2014-09-07
              • 1970-01-01
              • 1970-01-01
              • 2023-04-02
              • 1970-01-01
              • 2011-04-06
              相关资源
              最近更新 更多