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

为何Object.keys()返回排序后的对象键?示例解析

为什么Object.keys()会返回排序后的键值?

这个问题问得好!很多人第一次遇到这种情况都会疑惑——明明定义对象时键的顺序是100、2、7,调用Object.keys(anObj)却得到了["2", "7", "100"]。其实这是ES6(ECMAScript 2015)之后规范明确规定的行为,并非随机或引擎差异导致的。

具体的排序规则是这样的:

  • 第一步:整数类型键排序:先处理所有可以被解析为十进制整数的键(哪怕你定义时用的是数字,对象的键最终都会转为字符串,比如100会变成"100"),这些键会按照数值从小到大的顺序排列。
    你的例子里,"100"、"2"、"7"都属于这类键,所以按数值2 < 7 < 100排序,就得到了["2", "7", "100"]。
  • 第二步:非整数字符串键排序:处理完整数键后,剩下的非整数字符串键(比如"foo"、"bar2"这类),会按照它们被添加到对象中的顺序排列。
  • 第三步:Symbol类型键排序:最后处理Symbol类型的键,同样按照添加顺序排列。

补充:ES5及以前的情况

在ES5以及更早的版本中,规范并没有定义对象键的遍历顺序,不同JavaScript引擎可能会有不同的实现,那时候确实可能出现键顺序和定义顺序一致的情况,但这是不可靠的。ES6之后才统一了这个规则,让遍历行为在所有引擎下保持一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:58:45