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

Javascript 通过Object.keys从对象返回的键的顺序,javascript,key,Javascript,Key,不保证订购对象密钥。键可以是数字或字符串 keys(yourObject)以字符串形式返回该对象上的键数组 在Chrome、Safari、Firefox和node.js上,如果在对象上创建数字键并将其与object.keys()一起返回,则它们都是按字典顺序排列的。只要字符串代表它们的文字版本(例如,没有前导的0),那么它们就是按数字顺序排列的 我试图回答的是,Object.keys()是否保证键按字典顺序返回,或者这只是流行浏览器/js环境中实际实现的产物。我认为顺序是特定于实现的。根据Obj

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

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

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


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

我认为顺序是特定于实现的。根据Object.keys的EcmaScript规范第15.2.3.14节:

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

(“此算法”指规范中用于为
对象.keys
生成返回值的算法)

以及本规范第12.6.4节(关于in的
声明):

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


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

感谢您找到这些信息。回答了我的问题,这是事实上的实现。