【问题标题】:if test on [undefined]如果在 [未定义] 上进行测试
【发布时间】:2019-04-13 08:26:42
【问题描述】:

[undefined] === true 返回false

if ([undefined]) { 
  console.log('is true') 
}

is true 打印到控制台。

这有什么意义?

【问题讨论】:

  • 请为您使用的语言添加标签(javascript?)
  • 试试Boolean([undefined])
  • @John:光滑!谢谢!我猜这就是条件测试所执行的操作?

标签: javascript arrays if-statement conditional undefined


【解决方案1】:

使用三个等号来判断值和类型是否相同;这就是为什么1 == true1 !== true

您的 if 语句试图评估 [undefined],但仅限于它是真还是假。 [undefined] 是一个非空数组,因此它是真实的,并在 if 语句中计算为 true。然而,[undefined] 本身并不是一个布尔值,所以这就是 [undefined] === true 评估为 false 的原因。

这在某种程度上解释了正在发生的事情:https://www.sitepoint.com/javascript-truthy-falsy/

【讨论】:

  • 我应该以不同的方式写我的问题。我的新/真正问题是为什么如果[undefined] == true 返回false,那么if ([undefined]) {} 分支会执行。如果不是与true 比较,如何确定“真实性”?
  • @fuzzybear3965 developer.mozilla.org/en-US/docs/Glossary/Truthy "所有值都是真实的,除非它们被定义为虚假(即,除了 false、0、""、null、undefined 和 NaN)。"
  • 这是一个好的开始。但是,它并没有解释为什么 [undefined] == true 会返回 false,因为它显然是真实的。
  • 因为真值与“等于真”不同。当您进行显式布尔比较时,您可能会因依赖真实性而得到不同的结果。这是您在 JS 编程中必须注意的大陷阱之一。
  • 我的回答确实有一个问题,我暗示真实与真实相同;我刚刚删除了那一点。但是,是的……JavaScript 在这方面可以很有趣。
猜你喜欢
  • 2013-09-08
  • 2021-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-16
  • 2014-04-20
  • 2019-07-09
  • 1970-01-01
相关资源
最近更新 更多