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

Object.entries索引疑问:为何0索引返回的是定义时第二个键值对?

为什么Object.entries返回的数字键顺序和定义时不一样?

这是个非常典型的JavaScript对象行为问题,你猜的没错——核心原因就是数字类型的对象键会被自动按数值大小排序,完全不遵循你定义时的顺序!

具体规则是这样的:

JavaScript对象的键遍历(包括Object.entries、Object.keys、for...in循环)会遵循一套固定的顺序:

  • 首先,所有可以被解析为十进制整数的键(不管你写的是数字字面量还是字符串形式的数字,比如'2'和2都会被视为同一类),会按照数值升序排列;
  • 之后,才是其他类型的键(比如非数字字符串、Symbol),按照它们被插入到对象中的顺序排列。

回到你的例子:

const object3 = { 100: 'a', 2: 'b', 7: 'c' };

这里的三个键100、2、7都是整数类型的键,所以会被自动排序为2 → 7 → 100,对应的Object.entries返回的数组自然就是:

[["2", "b"], ["7", "c"], ["100", "a"]]

所以取索引0的元素,就是["2", "b"]啦。

怎么验证这个规则?

你可以用for...in循环遍历对象,会得到完全一样的顺序:

for (const key in object3) {
  console.log(key); // 依次输出: 2, 7, 100
}

如果想保留定义顺序怎么办?

如果你的业务逻辑需要严格遵循键的插入顺序,推荐使用Map而不是普通对象。Map会完全按照你添加键值对的顺序保存和遍历:

const map3 = new Map([
  [100, 'a'],
  [2, 'b'],
  [7, 'c']
]);
console.log(Array.from(map3.entries())[0]); // 输出: [100, "a"]

内容的提问来源于stack exchange,提问作者ashfaq.p

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:11:49