检查属性名称是否为数组索引

Ori*_*iol 2 javascript arrays indexing

我想为数组赋予一些属性,但前提是它们是数组索引.否则一些实现可能会将底层结构切换到哈希表,我不希望这样.

例如,这些是数组索引:"0","1","2","3","4","4294967294"

但这些都不是:"abcd","0.1","-0","-1"," 2","1e3","4294967295"

有没有一种简单的方法来测试字符串是否是数组索引?

Ori*_*iol 6

在ECMAScript 5中,Array索引定义如下:

当且仅当ToString(ToUint32(P))等于 PToUint32(P)不等于2 32 -1时,属性名P(以String值的形式)是数组索引.

(ECMAScript 2015中定义措辞不同,但应该是等效的.)

然后,代码将是

function isArrayIndex(str) {
  return (str >>> 0) + '' === str && str < 4294967295
}
Run Code Online (Sandbox Code Playgroud)

一步步,