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

JavaScript对象属性访问性能差异:字母键为何快于数字键?

问题背景说明

我好奇哪种存储引用列表的方式在后续访问特定项时速度更快。

为测试性能,我创建了两个变量,它们包含相同的条目列表,每个条目都有一个键和对原始元素的引用。

我创建了一个对象,其中属性为键,值为引用;同时创建了一个数组,数组中的每个对象都包含key属性和存储引用的ref属性。

我想测试哪种方式访问特定项的速度更快。

const elementIDsObj = {
    "123": "123",
    "234": "123",
    "345": "123",
    "456": "123",
    "567": "123",
    "678": "123",
    "789": "123",
    "890": "123",
    "901": "123",
    "012": "123",
    "abc": "123"
};

const elementIDsArray = [
    {key: "123", ref: "123"},
    {key: "234", ref: "123"},
    {key: "345", ref: "123"},
    {key: "456", ref: "123"},
    {key: "567", ref: "123"},
    {key: "678", ref: "123"},
    {key: "789", ref: "123"},
    {key: "890", ref: "123"},
    {key: "901", ref: "123"},
    {key: "012", ref: "123"},
    {key: "abc", ref: "123"}
];

访问对象类型的特定项时,我只需使用elementsIDsObj[KEY];访问数组类型的特定项时,我使用elementIDsArray.find(item => item.key === KEY);

我做这个对比是因为不清楚对象属性直接访问的实现方式,以为它和我用数组结构实现的方式类似。

结果表明,实际实现和我想的不同,因此对象属性直接访问比数组的迭代查找快得多。

问题

最初我只使用纯数字字符串作为键,最后添加了一个纯字母键。我惊讶地发现,使用含至少一个字母的键进行直接访问,速度远快于纯数字键。

我想了解这是为什么,对象属性访问背后的机制是什么,导致了如此巨大的访问时间差异。

测试环境

Google Chrome 103.0.5060.134(MacOS Monterey 12.3.1)

字母键纯数字键
Ops/s575,490,052.66 ± 4.68%47,066,784.33 ± 2.74%

Mozilla Firefox 80.0.1(64位,MacOS Monterey 12.3.1)

字母键纯数字键
Ops/s1,139,482,575.49 ± 7.52%214,063,334.44 ± 3.2%

Mozilla Firefox 103.0.1(64位,MacOS Monterey 12.3.1)

字母键纯数字键
Ops/s1,279,722,302.67 ± 0.91%1,210,963,390.96 ± 3.27%

Google Chrome 104.0.5112.69(Android 11 - One Plus)

字母键纯数字键
Ops/s148,180,565.26 ± 0.6%7,392,240.71 ± 0.41%

Mozilla Firefox 103.1.0(Android 11 - One Plus)

字母键纯数字键
Ops/s677,170,098.93 ± 0.42%681,474,092.7 ± 0.22%

看起来Firefox的JS引擎经过修改后消除了这种巨大差异,而Chrome的实现仍存在显著性能差距。

提前感谢解答

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 09:45:25