如果我像这样创建一个对象:

var obj = {};
obj.prop1 = "Foo";
obj.prop2 = "Bar";

生成的对象always会像这样吗?

{ prop1 : "Foo", prop2 : "Bar" }

也就是说,属性的顺序是否与我添加它们的顺序相同?

推荐答案

自ES2015以来,对象的迭代顺序遵循a certain set of rules,但不是it does not (always) follow the insertion order.简单地说,迭代顺序是字符串键的插入顺序和类数字键的升序的组合:

// key order: 1, foo, bar
const obj = { "foo": "foo", "1": "1", "bar": "bar" }

使用数组或Map object可以更好地实现这一点.MapObjectguarantees the keys to be iterated in order of insertion有一些相似之处,无一例外:

贴图中的键是有序的,而添加到对象中的键不是有序的.因此,当对其进行迭代时,Map对象会按插入顺序返回键.(请注意,在ECMAScript 2015规范中,对象确实保留了字符串键和符号键的创建顺序,因此仅使用ie字符串键遍历对象将按插入顺序生成键)

值得一提的是,在ES2015之前,对象中的属性顺序根本不能得到保证.从ECMAScript Third Edition (pdf)开始的对象定义:

4.3.3目标

对象是

Javascript相关问答推荐

JavaScript .Click()函数不起作用

强制执行useStatego struct 化变量[foo,setFoo]的命名约定?

单击更新页面的按钮后,页面刷新;测试/断言超时,有两个标题,但没有一个标题

JQuery. show()工作,但. hide()不工作

Spring boot JSON解析错误:意外字符错误

在带有背景图像和圆形的div中添加长方体阴影时的重影线

如何在Vue 3中创建自定义 Select 组件,并将选项作为HTML而不是props 传递?

Websocket错误—有一个或多个保留位开启:reserved1 = 1,reserved2 = 0,reserved3 = 0

从页面到应用程序(NextJS):REST.STATUS不是一个函数

为什么在函数中添加粒子的速率大于删除粒子的速率?

如何为仅有数据可用的点显示X轴标签?

将嵌套数组的元素乘以其深度,输出一个和

如何在一个对象Java脚本中获取不同键的重复值?

如何组合Multer上传?

P5JS-绘制不重叠的圆

我无法在Api Reaction本机上发出GET请求

我的NavLink活动类在REACT-ROUTER-V6中出现问题

我在哪里添加过滤器值到这个函数?

将字体样式应用于material -UI条形图图例

Firefox的绝对定位没有达到预期效果