如果我创建这样的对象:
var obj={};
obj.prop1=“Foo”;
obj.prop2=“Bar”;
生成的对象是否总是这样
{prop1:Foo,prop2:Bar}
也就是说,属性的顺序是否与我添加它们的顺序相同
自ES2015以来,对象的迭代顺序遵循一组特定的规则,但它并不(总是)遵循插入顺序。简单地说,迭代顺序是字符串键的插入顺序和数字键的升序的组合:
//键顺序:1,foo,bar
const obj={quot;foo";:“foo";,“1";:“1";,“bar";:“bar";}
使用数组或Map对象可以更好地实现这一点映射与对象有一些相似之处,并保证按插入顺序迭代键,无一例外:
贴图中的键是有序的,而添加到对象中的键不是有序的。因此,当对其进行迭代时,贴图对象将按插入顺序返回关键帧。(请注意,在ECMAScript 2015规范中,对象确实保留了字符串和符号键的创建顺序,因此仅使用ie字符串键遍历对象将按插入顺序生成键)
请注意,在ES2015之前,对象中的属性顺序根本无法保证。ECMAScript第三版(pdf)中的对象定义:
4.3.3目标
对象是
输入对象它是一个无序的属性集合每个属性
包含基元值、对象或
作用存储在数据库中的函数
对象的属性称为
方法