javascript中的对象属性排序

pet*_*ina 2 javascript v8

我试图理解javascript对象在使用它们作为关联数组时的作用.

来自ECMA:

4.3.3对象是Object类型的成员.它是一个无序的属性集合,每个属性都包含一个原始值,对象或函数.存储在对象属性中的函数称为方法.

在浏览器中使用它们(chrome):

x = { 2: 'a', 3: 'b', 1: 'c' }
> Object {1: "c", 2: "a", 3: "b"}

y = { 'b': 2, 'c': 3, 'a': 1 }
> Object {b: 2, c: 3, a: 1}
Run Code Online (Sandbox Code Playgroud)

虽然在第一个示例中将数字作为键,但是它们变得有序,在第二个示例中使用字符串,它们不会(ordered = a,b,c).

我正在使用这些对象与字符串键,我真的不希望他们在应用程序的某个阶段(如果这甚至可能)改变顺序,因为它可能会崩溃我正在使用的管道.

问题是,这种方法对于每台javascript机器都是安全和正常的,还是应该使用其他方法来保证订单不会改变?

谢谢!

编辑:我使用的是node.js,它运行在V8(chrome引擎)上,"按插入顺序排序非数字属性"(Felix Kling).愿V8的这种行为发生变化吗?

Gui*_*ehn 5

虽然Chrome可以在使用数字作为对象中的索引时保证属性顺序,但ECMA规范并没有说它应该这样做,所以保证我不会依赖这种行为.我建议您在要保持数据顺序时重构数据以使用数组.