【发布时间】:2020-04-12 19:45:44
【问题描述】:
我刚刚在 Array.prototype.every() 的 MDN 页面上找到了这篇文章:
every就像数学中的“所有人”量词。特别是,对于一个空数组,它返回 true。 (vacuously true 空集的所有元素都满足任何给定条件。)
确实如此,我们可以看到:
console.log([].every(a => a === "any possible value here"))
但是:
console.log([].some(a => a === "any possible value here"))
问题:
有被关闭的风险,基于意见,这是我的问题:为什么 ECMA 不选择将 Array.prototype.some() 的回调视为空数组的空数组?
在我看来,如果 “空集的所有元素都满足任何给定条件”,正如 MDN 页面所说,那么它遵循 “它空集的任何元素满足任何给定条件是空洞的”。例如,如果我们使用维基百科的例子,
房间里所有手机都打开和关闭
我们可以说“房间里的一些手机已关闭”同样(并且空洞地)是正确的。不是这样吗?
【问题讨论】:
-
空集中不存在满足任何给定条件的成员也是空洞的事实。我会将“房间里的一些手机关机”解释为“这个房间里有没有手机关机”。
-
这里的比喻是错误的。正确的类比是“这个房间里有一些手机关机了”。它可能是唯一的,也可能不是,关键是它存在。另一方面,房间里的所有手机可能都是0
-
some 通常是一个肯定的断言,即存在至少一个某事或其他。一个空集实现没有多大意义。
-
@Megapteranovaeangliae:“every”基本上是“some”与否定条件的否定:“every(condition)”表示“not(some(not(condition))”。如果被接受作为一个有效的转换,那么“every”和“some”必须在空集上提供相反的值。
标签: javascript