You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

同一环境下对未修改对象多次调用Object.keys(),返回键顺序是否一致?

JavaScript Object.keys() 调用顺序问题

完全没问题,我来给你捋清楚这个事儿:

首先直接给结论:你的例子里keys1和keys2的元素顺序一定是一致的,而且在同一环境下,只要两次调用Object.keys()之间没有修改目标对象,那每次返回的键顺序都会完全相同。

为什么这么肯定?因为从ES6(ECMAScript 2015)开始,JavaScript规范就明确规定了对象属性的遍历顺序,Object.keys()这类方法必须严格遵循这个规则:

  • 优先遍历所有可枚举的数字类型键,按数值从小到大排序(比如键是'10'、'2'的话,会先返回'2'再返回'10')
  • 接着遍历所有可枚举的字符串类型键,完全按照它们被添加到对象的顺序排列
  • 最后遍历所有可枚举的Symbol类型键,同样按添加顺序来

你代码里的obj键都是字符串类型,而且是按'a'、'b'、'c'的顺序添加的,所以不管调用多少次Object.keys(obj),返回的数组都是['a', 'b', 'c'],顺序不会乱。

补充一点:只要对象在两次调用之间没有被修改——比如新增、删除键,或者把某个键的类型改了(比如从字符串变成数字)——那这个顺序就不会有变化。现在所有现代浏览器、Node.js环境都严格遵守这个规范,不再是早期那种依赖实现的不确定行为了。

你提到和Python字典行为类似,确实,Python 3.7+也规定了字典会保留插入顺序,但JS有个特殊点:数字键会被单独排序,这一点和Python不一样,但在你的例子里不影响结果。

内容的提问来源于stack exchange,提问作者vsilin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:41:50