通过对象返回的键的顺序.对象中的键

Order of keys returned via Object.keys from an object

本文关键字:对象 顺序 返回      更新时间:2023-09-26

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

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

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

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

我认为顺序是特定于实现的。来自EcmaScript规范的15.2.3.14节,Object.keys:

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

("此算法"指规范中生成Object.keys返回值的算法)

从规范的12.6.4节(关于for-in语句):

列举属性的机制和顺序(步骤6)。第一个算法中的A,步骤7。

还请注意,字典顺序与数字顺序不同。例如,如果键为"1"、"2"answers"10",则字典顺序为"1"、"10"、"2"。(我测试的所有JS引擎都返回数字顺序:"1","2","10")