[].every(i => i instanceof Node) // -> true
为什么当数组为空时,JavaScript中数组上的每个方法都返回true。我正在尝试做类似的断言......
const isT = (val, str) => typeof val === str
const nT = (val, str) => !isT(val, str)
const is = {}
is.Undef = (...args) => args.every(o => isT(o, 'undefined'))
is.Def = (...args) => args.every(o => nT(o, 'undefined'))
is.Null = (...args) => args.every(o => o === null)
is.Node = (...args) => args.every(o => o instanceof Node)
is.NodeList = (...args) => args.every(n => n instanceof NodeList)
但即使没有传递任何参数,这些仍然会返回true。
答案 0 :(得分:9)
请参阅the docs
每个行为都像#34;对于所有"数学中的量词。在 特别是,对于空数组,它返回true。 (这是真实的 空集的所有元素都满足任何给定条件。)
作为编辑,因为我看了Vacuous truth。我从上下文中理解它,但我对正式定义感兴趣。这个释义的例子说明了这个含义:
"你是我最喜欢的侄子"如果他是唯一的侄子,那么这是一个空洞的陈述:没有其他人可以考虑。
答案 1 :(得分:3)
在数学上更有效地说"每个"是 - 真空 - 如果没有元素,则为真。
你需要这样的关系"对于所有x,P"与" NOT相同(存在x使得不是P)"。
这在某种程度上是一种常规问题,但它确实能够很好地完成数学运算。"经常。
答案 2 :(得分:3)
来自Array.prototype.every的ECMAScript规范(大胆强调我的):
every
为数组中的每个元素调用 callbackfn 一次,按升序排列,直到找到 callbackfn 返回{{1> }} 即可。如果找到这样的元素,则每个元素立即返回false
。否则,如果 callbackfn 为所有元素返回false
,则true
将返回every
。[...]
true
就像所有""数学中的量词。 特别是,对于空数组,它会返回every
。
考虑上面的第一个更大胆的短语:因为true
找不到回调返回every
的元素(因为回调从不运行,因为没有元素),它返回{{1} },正如第二个粗体短语所证实的那样。
答案 3 :(得分:2)
每个行为都像#34;对于所有"数学中的量词。特别是,对于空数组,它返回true。 (空集的所有元素都满足任何给定条件,这是真实的。)