我正在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]?我错过了什么吗?

推荐答案

此算法首先只放置array个索引,而不是integer个索引.

不,实现ES 2015的引擎不应该重新定义整数索引,以表示规范之外的其他含义.他们应该使用253-1(但当时没有).另一方面,实现ES2019的引擎在OrdinaryOwnPropertyKeys算法中确实应该使用数组索引

Javascript相关问答推荐

错误:(0,react__WEBPACK_IMPORTED_MODULE_1__.useSYS State)不是函数或其返回值不可迭代

追踪执行顺序

React redux状态未在React-Router库中呈现

访客柜台的风格React.js

如何保持子画布元素的1:1宽高比?

在JavaScript中检索一些文本

Next.js Next/Image图像隐含性有任何类型-如何修复?

TypScript界面中的Infer React子props

当运行d3示例代码时,没有显示任何内容

有没有可能使滑动img动画以更快的速度连续?

我在我的Java代码中遇到了问题,代码的一部分看不到先前定义的对象

编剧如何获得一个div内的所有链接,然后判断每个链接是否都会得到200?

您能在卸载程序(QtInsteller框架)上添加WizardPage吗?

在我的index.html页面上找不到我的Java脚本条形图

Nextjs 13.4 Next-Auth 4.2登录(&Quot;凭据&,{});不工作

有效路径同时显示有效路径组件和不存在的路径组件

如何用javascript更改元素的宽度和高度?

如何组合Multer上传?

JavaScript将字符串数字转换为整数

select 2-删除js插入的项目将其保留为选项