真/假问题

问题描述 投票:0回答:2

简单介绍一下,我是一个学习 JS 的菜鸟,感觉进展顺利,但是我现在正在做一个简单的练习,我对某些事情很感兴趣。

我了解到: falsey 值是在布尔上下文中遇到时被视为 false 的值 例如: false、0、-0、0n、""、null、未定义、NaN(不是数字) true 是除 false 之外的所有内容(例如字符串、布尔值 true、任何非 0 的数字等)

因此,在下面的示例中,如果有人可以帮助我理解为什么 value => value == true,当我的数组中有一个字符串值(“Angela”)时,会打印出 false (就是这种情况)。谢谢!

let values = [11, NaN, [], "Angela"]

function checkForFalsey() {
  if (values.some(value => value == true)) {
    console.log("At least one item is falsey")
  }
}
checkForFalsey()

javascript
2个回答
0
投票

字符串既不是真值也不是假值。发生的情况称为类型强制。由于字符串和布尔值不是同一类型,JavaScript 会强制其中一种类型与另一种类型匹配,然后检查相等性(高级解释)。请参阅此处了解详细说明:https://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/

所以当你这样做时

"abc" == true
JavaScript 会将两个值强制转换为数字类型。字符串不是数字,因此
toNumber("abc")
返回
NaN
。它还将
true
强制转换为数字,在本例中返回
1
(正如您提到的,1 为真,0 为假)。

就其价值而言,

NaN
也不是真或假。将其与真或假进行比较总是会导致
false


-2
投票

编辑:

由于代码片段,问题有点令人困惑,我知道您正在尝试寻找虚假值。

原因:

value => value == true

会打印出 false 这是因为数组中没有一个元素等于

true

关于什么是假值,您是正确的,但这并不意味着真值是

==
true

在这里您可以阅读更多相关信息:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness

检查真值的一种方法是:

(values.some(value => value != false)) 

(values.some(value => !!value === true)) 

旧答案:

因为你使用的方法测试数组中至少有一个元素符合条件。

您可以阅读更多这里

如果你想检查数组的所有元素是否符合条件,那么你可以使用

.every()

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every

let values = [11, NaN, [], ""]

function checkForFalsey() {
  if (values.every(value => value == false)) {
    console.log("All values are falsey");
  } else {
    console.log("NOT all values are falsey");
  }
}
checkForFalsey()

© www.soinside.com 2019 - 2024. All rights reserved.