调用空数组的“every”和“some”方法会返回奇怪的结果

Dmi*_*sky 2 javascript

在 JavaScript 中,为什么该行会[].every(Boolean)返回true?并[].some(Boolean)返回false

如果数组中没有元素,那么它们是未定义的(未声明的),因此是假的。据此,带有数组[null]或 的片段将完全按照预测[undefined]返回。但是任何空数组都不应该首先 调用回调,并返回类似or 的内容,从而再次返回。false
Booleanundefinednullfalse

我错过了什么?

看起来,JS 解释器真正做的就是这个Boolean([])(在第一种情况下)。这当然会回报true。也许这是正确的?

pfg*_*pfg 5

如果数组的每个元素都通过测试,则“every”返回 true。如果数组中没有项目,则数组中的“每个”元素都通过测试。

如果数组中至少有一个元素通过测试,则“some”返回 true。如果数组为空,则没有元素通过测试,并且返回 false。

看起来,JS 解释器真正做的是 Boolean([]) (在第一种情况下)。这当然返回 true。也许这是正确的?

对于空数组,根本不every调用some回调,因为没有任何可测试的内容。您可以通过以下方式检查:

[].every(() => console.log("this never prints"));
[].some(() => console.log("this never prints"));
Run Code Online (Sandbox Code Playgroud)