【问题标题】:Why does `new Boolean("false")` retruns `true`? [duplicate]为什么`new Boolean("false")`返回`true`? [复制]
【发布时间】:2020-12-11 12:48:01
【问题描述】:

我的代码是:

console.log(JSON.stringify([new Number(3), new Boolean("true"), new String("X")]));
console.log(JSON.stringify([new Number(3), new Boolean("false"), new String("X")]));

输出是:

[3, true, "X"]
[3, true, "X"]

为什么第二个输出显示true 而不是false?我是JS新手,请原谅我的错误。

【问题讨论】:

标签: javascript boolean


【解决方案1】:

只有null , false, 0, -0, undefined , NaN, "" 是假值。


// it should be 
 new Boolean(false); 
// it should not be
 new Boolean("false"); 

【讨论】:

  • … 和 0ndocument.all。见MDN
【解决方案2】:

Boolean 构造函数通过其真假将值转换为布尔值;它不解析字符串。你可以这样想:

function Boolean(x) {
    if (x) {
        return true;
    }
    return false;
}

如果x"false",您不会期望该代码返回false,对吧? JS 中唯一的虚假值是:

  • 0(和 0n)
  • 未定义
  • 错误本身
  • NaN
  • 和空字符串“”

如果你确实想解析一个字符串,那么你可以这样做 x == "true":

"true" == "true" // true
"false" == "true" // false

【讨论】:

    【解决方案3】:

    正如提姆所说,"false" 不等于 false

    你不需要数据类型;只需将您想要的值直接放入数组中即可。

    console.log(JSON.stringify([3, true, "X"]));
    console.log(JSON.stringify([3, false, "X"]));

    【讨论】:

      猜你喜欢
      • 2021-11-10
      • 2015-06-22
      • 1970-01-01
      • 2017-04-30
      • 2019-02-08
      • 2013-11-10
      • 2013-09-18
      • 2014-07-03
      • 2016-03-29
      相关资源
      最近更新 更多