Sau*_*ode 14 javascript arrays methods
[].every(i => i instanceof Node) // -> true
Run Code Online (Sandbox Code Playgroud)
为什么当数组为空时,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)
Run Code Online (Sandbox Code Playgroud)
但即使没有传递任何参数,这些仍然会返回true.
Dra*_*18s 11
查看文档
每一个行为都像数学中的"为所有人"量词.特别是,对于空数组,它返回true.(空集的所有元素都满足任何给定条件,这是真实的.)
作为编辑,因为我看起来很奇怪.我从上下文中理解它,但我对正式定义感兴趣.这个解释的引用举例说明了这个含义:
"你是我最喜欢的侄子",如果他是唯一的侄子,那么这是一个空洞的陈述:没有其他人可以考虑.
aps*_*ers 10
来自Array.prototype.every的 ECMAScript 规范(粗体强调我的):
every
对数组中存在的每个元素按升序调用callbackfn一次,直到找到callbackfn返回的false
元素。如果找到这样的元素,则 every 立即返回false
。否则,如果callbackfn返回true
所有元素,every
将返回true
。[...]
every
就像数学中的“for all”量词。特别是,对于空数组,它返回true
。
考虑上面的第一个粗体短语:由于every
没有找到回调返回的元素false
(因为回调甚至从未运行,因为没有元素),它返回true
,正如第二个粗体短语所证实的那样。
如果没有元素,那么说“每一个”都是空洞的真,这在数学上更有效。
您需要它,因此关系“对于所有 x,P”与“NOT(存在 x 不存在 P)”相同。
这在某种程度上是一个约定俗成的问题,但它确实经常“让数学得到很好的结果”。