在 JavaScript 中,为什么该行会[].every(Boolean)返回true?并[].some(Boolean)返回false?
如果数组中没有元素,那么它们是未定义的(未声明的),因此是假的。据此,带有数组[null]或 的片段将完全按照预测[undefined]返回。但是任何空数组都不应该首先
调用回调,并返回类似or 的内容,从而再次返回。falseBooleanundefinednullfalse
我错过了什么?
看起来,JS 解释器真正做的就是这个Boolean([])(在第一种情况下)。这当然会回报true。也许这是正确的?
如果数组的每个元素都通过测试,则“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)
| 归档时间: |
|
| 查看次数: |
3986 次 |
| 最近记录: |