1

不保证对象键是有序的。键可以是数字或字符串。

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

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

我要回答的是,如果 Object.keys()保证键按字典顺序返回,或者这只是流行浏览器/js 环境中事实上的实现的产物。

4

1 回答 1

3

我认为订单是特定于实现的。来自 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”。)

于 2013-06-14T04:25:07.457 回答