0

快速介绍一下,我是一个学习 JS 的菜鸟,并且觉得它进展顺利,但是我现在正在做一个简单的练习,我挂断了一些东西。

我了解到:错误值是在布尔上下文中遇到时被认为是错误的值,例如:false、0、-0、0n、“”、null、未定义、NaN(不是数字)真的是除了falsey(如字符串、布尔值 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()

4

2 回答 2

0

字符串既不真实也不虚假。发生的事情称为类型强制。由于 string 和 Boolean 不是同一种类型,JavaScript 会强制其中一种类型匹配另一种类型,然后检查相等性(高级解释)。详细解释见这里:https ://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/

因此,当您执行"abc" == trueJavaScript 时,会将这两个值强制为数字类型。字符串不是数字,所以toNumber("abc")返回NaN。它还强制true转换为一个数字,1在这种情况下返回(如您所述,1 为真,0 为假)。

对于它的价值,NaN也不是真假。将其与 true 或 false 进行比较总是会导致false.

于 2021-05-21T00:23:39.757 回答
-2

编辑:

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

之所以:

value => value == true

会打印出 false 这是因为数组的所有元素都不等于true.

您对什么是虚假值是正确的,但这并不意味着真实值是==to 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()

于 2021-05-21T00:15:08.700 回答