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