'isArraylike'是?

时间:2014-01-14 14:20:08

标签: javascript arrays

至于我的理解,JavaScript中的'ArrayLike'类型是一个带有自己的数字正整数键的对象,在连续的顺序中不是必需的(稀疏数组等),其中object(int){{1所有属性都更大,对吧?我遇到了对这个问题的十几个解释,但是每个人都给出了不同的观点,所以我写了找到max(int)键的函数,删除.length属性(以防止.length产生Math.max()值,将NaN与任何东西进行比较),保留对象自身密钥的其余部分。如果所有这些都是数字,则返回最大值,如果不是,则给出false(返回NaN作为结果),并将其输出与接受的jQuery等效函数的结果相比较。欢迎所有解释。这是我运行的代码:

false

1 个答案:

答案 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实例。