通过Object.keys从对象返回的键的顺序

时间:2013-06-14 04:15:37

标签: javascript key

不保证订购对象密钥。键可以是数字或字符串。

Object.keys(yourObject)以字符串形式返回该对象上的键数组。

在Chrome,Safari,Firefox和node.js中,如果您在对象上创建数字键并使用Object.keys()返回它们,则它们都是按字典顺序排列的。只要字符串代表它们的文字版本(例如没有前导0),那么它们就是按数字顺序排列。

我想回答的是,如果Object.keys()保证按字典顺序返回键,或者这只是流行的浏览器/ js环境中的defacto实现的工件

1 个答案:

答案 0 :(得分:2)

我认为订单是特定于实施的。来自Object.keys的EcmaScript规范的第15.2.3.14节:

  

如果实现为for-in语句定义了特定的枚举顺序,则必须在此算法的步骤5中使用相同的枚举顺序。

(“此算法”是指规范中用于生成Object.keys的返回值的算法。)

从规范的第12.6.4节(for-in声明):

  

未指定枚举属性的机制和顺序(第一个算法中的步骤6.a,第二个算法中的步骤7.a)。

另请注意,词典顺序与数字顺序不同。例如,如果键是“1”,“2”和“10”,则词典顺序是“1”,“10”,“2”。 (我测试的所有JS引擎都返回数字顺序:“1”,“2”,“10”。)