1 of 12

integer indices vs. array indices

tc39/ecma262#1242

2 of 12

3 of 12

+0

2**32-2

+0

2**53-1

integer index

array index

4 of 12

5 of 12

Reflect.ownKeys({� a: 1,� [2**53]: 1, // max integer index + 1� [2**53-1]: 1, // max integer index� 42: 1,� [2**32-1]: 1, // max array index + 1� [2**32-2]: 1, // max array index�});�

6 of 12

Reflect.ownKeys({� a: 1,� [2**53]: 1, // max integer index + 1� [2**53-1]: 1, // max integer index� 42: 1,� [2**32-1]: 1, // max array index + 1� [2**32-2]: 1, // max array index�});���// Expected result (per current spec):�[� '42',� '4294967294', // max array index� '4294967295', // max array index + 1

'9007199254740991', // max integer index� // -----------------------------------------� 'a',� '9007199254740992', // max integer index + 1�]

7 of 12

Reflect.ownKeys({� a: 1,� [2**53]: 1, // max integer index + 1� [2**53-1]: 1, // max integer index� 42: 1,� [2**32-1]: 1, // max array index + 1� [2**32-2]: 1, // max array index�});���// Expected result (per current spec):�[� '42',� '4294967294', // max array index� '4294967295', // max array index + 1� '9007199254740991', // max integer index

// -----------------------------------------� 'a',� '9007199254740992', // max integer index + 1�]

​

​

​

​

​

​

​

​

​

​

// Actual result in all engines:�[� '42',� '4294967294', // max array index

// -----------------------------------------� 'a',� '9007199254740992', // max integer index + 1� '9007199254740991', // max integer index� '4294967295', // max array index + 1�]

8 of 12

9 of 12

Merge the PR?

tc39/ecma262#1242

10 of 12

Related:

tc39/ecma262#1243

tc39/ecma262#1244

11 of 12

12 of 12