【问题标题】:Empty array is truthy or not in JavaScript?JavaScript 中的空数组是否真实?
【发布时间】:2020-10-21 11:07:35
【问题描述】:

我对以下结果有点困惑,有人可以指出幕后发生的事情吗? 为什么 Boolean([]) 会返回 true? 并松散地将空数组与布尔值进行比较 [] == false 会评估为 true 吗?
但严格比较会评估为假??

这是我不明白的部分

非常感谢!

Boolean([])
//true

[] == false
//true

[] === false
//false

【问题讨论】:

  • javascript 中的空数组是真实的,为了检查数组你必须检查数组的长度if ([].length) {// do something } else {// do something else}

标签: javascript arrays boolean comparison


【解决方案1】:

可靠检查的最简单方法是使用长度属性。

[].length // 0, falsy

['something'].length // 1. truthy

更多信息请见官方spec

【讨论】:

  • 但为什么 Boolean([]) 会返回 true?并松散地将空数组与布尔值 [] == false 进行比较会评估为真吗?但严格比较会评估为假?这是我不明白的部分
  • 这并不完全合乎逻辑。请参阅上面的链接回购。这些事情有很多例子是疯狂的。但是,在寻找奇怪的错误时知道它们在那里是愚蠢的。
【解决方案2】:
Boolean([]) // => true
  • 这里,[](数组是对象类型)正在转换为布尔值。自从 [] 有参考价值,转换后为真。

.

[] == false // => false
  • 在这里,相等运算符松散地检查值。由于双方都是 不同的类型(对象和布尔值),其中之一是布尔值,所以 它将转换为(0或1)并与另一侧进行比较。这将是 等价于 +[] == +false,即为 0 == 0,为真

Check MDN document for more details

[] === false // => false
  • 在这里,严格等式运算符。将检查类型和值 两者都是不同的类型,它会是假的。

【讨论】:

  • 谢谢!简洁的解释
猜你喜欢
  • 2017-11-19
  • 2012-01-21
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多