我正在try 理解JavaSript对象如何对其属性进行排序.据我了解,从ECMA262个开始,第一个物业总是integer index个物业.例如,如果使用Node.js、Deno或Bun打印这些对象:
console.log({ a: 0, [-1]: 1 })
console.log({ a: 0, [0]: 1 })
console.log({ a: 0, [2 ** 32 - 2]: 1 })
console.log({ a: 0, [2 ** 32 - 1]: 1 })
console.log({ a: 0, [2 ** 32]: 1 })
我们会有
{ a: 0, '-1': 1 }
{ '0': 1, a: 0 }
{ '4294967294': 1, a: 0 }
{ a: 0, '4294967295': 1 }
{ a: 0, '4294967296': 1 }
看起来像是在[0, 2^32-2]
范围内定义了一个整数索引.它符合array index
的定义:
array index是一个整数索引,其数值i在+0 ≤ i 2^32 - 1的范围内.
然而,它与integer index
的定义不同:
integer index是一个String值的属性键,它是一个规范的数字String(参见7.1.16),其数值是+0或≤ 2^53−1的正整数.
所以,我的问题是,对于integer index的定义,JavaScript引擎应该使用[0, 2^53-1]
,还是ECMAScript 2015应该使用[0, 2^32-2]
?我错过了什么吗?