JavaScript 中“整数索引”的定义(ECMAScript 2015)

问题描述 投票:0回答:1

我试图了解 JavaSript 对象如何对其属性进行排序。据我了解,从ECMA262开始,第一个属性始终是整数索引属性。例如,如果使用 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
的定义:

数组索引是一个整数索引,其数值i在+0≤i< 2^32 - 1.

范围内

但是,它与

integer index
的定义不同:

整数索引是一个字符串值属性键,它是一个规范的数字字符串(参见7.1.16),其数值为+0或一个≤2^53−1的正整数。

所以,我的问题是,JavaScript 引擎应该使用

[0, 2^53-1]
还是 ECMAScript 2015 应该使用
[0, 2^32-2]
来定义 整数索引?我错过了什么吗?

javascript object ecmascript-6
1个回答
0
投票

此算法已更改以与实现现实保持一致,仅将数组索引放在第一位,而不是整数索引。

© www.soinside.com 2019 - 2024. All rights reserved.