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

如何让浏览器控制台展开JS对象时保持属性定义顺序?

问题:控制台展开对象时属性顺序与定义顺序不符

给定以下JavaScript代码:

const resultMain = {
    mad: [1, 2, 3],
    led: [62, 73, 85, 96, 10],
};

const customConsoleOutput = {
    top: resultMain.mad,
    rest: resultMain.led,
};

console.log(customConsoleOutput);

执行后,控制台折叠状态下显示{top: Array(3), rest: Array(5)},但展开后属性会按字母顺序排列(rest在前、top在后)。需要保持展开后的属性顺序与定义顺序一致(top在前、rest在后),且必须保留数组的展开功能,因此字符串输出和console.table不适用。


解决方案

方法1:调整浏览器控制台设置(最简单)

大部分现代浏览器(如Chrome、Edge)的控制台默认会对对象属性按字母排序显示,关闭该设置即可解决:

  • 打开控制台(F12),点击右上角的设置图标(⚙️)
  • 在设置面板中找到**"按属性名称排序"**(Sort properties by name)选项,取消勾选
  • 刷新页面重新执行代码,展开对象后即可按属性定义顺序显示

方法2:用Map替代普通对象(兼容所有环境)

Map会严格按照键的插入顺序存储和展示,且数组依然保留可展开功能:

const resultMain = {
    mad: [1, 2, 3],
    led: [62, 73, 85, 96, 10],
};

const customConsoleOutput = new Map([
    ['top', resultMain.mad],
    ['rest', resultMain.led],
]);

console.log(customConsoleOutput);

方法3:手动定义属性枚举顺序(保留普通对象结构)

如果必须使用普通对象,可通过Object.defineProperty逐个添加属性,确保枚举顺序与定义顺序一致(兼容旧版环境):

const resultMain = {
    mad: [1, 2, 3],
    led: [62, 73, 85, 96, 10],
};

const customConsoleOutput = {};
Object.defineProperty(customConsoleOutput, 'top', {
    value: resultMain.mad,
    enumerable: true,
    writable: true,
    configurable: true
});
Object.defineProperty(customConsoleOutput, 'rest', {
    value: resultMain.led,
    enumerable: true,
    writable: true,
    configurable: true
});

console.log(customConsoleOutput);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 00:40:01