至于我的理解,JavaScript中的'ArrayLike'类型是一个带有自己的数字正整数键的对象,在连续的顺序中不是必需的(稀疏数组等),其中object(int){{1所有属性都更大,对吧?我遇到了对这个问题的十几个解释,但是每个人都给出了不同的观点,所以我写了找到max(int)键的函数,删除.length
属性(以防止.length
产生Math.max()
值,将NaN
与任何东西进行比较),保留对象自身密钥的其余部分。如果所有这些都是数字,则返回最大值,如果不是,则给出false
(返回NaN
作为结果),并将其输出与接受的jQuery等效函数的结果相比较。欢迎所有解释。这是我运行的代码:
false
答案 0 :(得分:3)
我遇到了十几个关于这个问题的解释,但每个人都给出了不同的观点......
那是因为有不同的观点。
如果A)它是一个数组,或者B)它不是一个函数,有一个数字length
属性,并且1.该属性的值是0
,或者jQuery的函数会考虑像数组一样的数组。 2.对象具有length - 1
的键。所以很多稀疏数组都不符合这个定义(如果它们不是数组)。
没有一个技术定义。例如,规范中出现的“类似数组”的唯一位置是Annex F,其中注意到§15.3.4.3现在允许将任何具有length
属性的内容传递给{{3}} {1}}而不是要求它是数组或Function#apply
对象。这比jQuery的定义或更加开放。
松散的定义是:有arguments
的东西(我想我们都可以就此达成一致)并且可能有由所有数字组成的属性名称,其数字十进制值(如果存在)落在该长度内,我们有时可能想要像数组一样对待。例如,length
对象。或者是一个jQuery实例。