Javascript 如何使console.log(obj)中的对象属性在Chrome中按字母顺序显示?

Javascript 如何使console.log(obj)中的对象属性在Chrome中按字母顺序显示?,javascript,console.log,object-properties,Javascript,Console.log,Object Properties,过去,当我使用console.log(obj)在Javascript中显示对象的属性时,属性将按字母顺序显示。最近,这种情况似乎有所改变。我假设新的顺序更接近于属性在代码中的实际存储方式(尽管我的印象是对象属性一开始并没有“真正的”固定顺序) 但是,对于大型、复杂的类,按字母顺序显示对于查找我要查找的属性非常有用。是否有使属性按字母顺序显示的选项,如前所述 (我还想知道当前属性顺序“代表”的是什么,以及它首先是如何确定的。) 虽然我的印象是对象属性一开始并没有一个“真正的”固定顺序 从ES201

过去,当我使用console.log(obj)在Javascript中显示对象的属性时,属性将按字母顺序显示。最近,这种情况似乎有所改变。我假设新的顺序更接近于属性在代码中的实际存储方式(尽管我的印象是对象属性一开始并没有“真正的”固定顺序)

但是,对于大型、复杂的类,按字母顺序显示对于查找我要查找的属性非常有用。是否有使属性按字母顺序显示的选项,如前所述

(我还想知道当前属性顺序“代表”的是什么,以及它首先是如何确定的。)

虽然我的印象是对象属性一开始并没有一个“真正的”固定顺序

从ES2015开始,他们确实是这样做的(即使是以前被豁免的业务现在也被纳入了监管范围),但你可能希望继续采取行动,就好像他们没有这样做一样。对于自己的属性,是它们添加到对象中的顺序(整数索引属性除外,整数索引属性以数字顺序列在其他属性之前);详情请参阅对的答复。(虽然引擎对继承属性的处理方式相当一致,但没有定义继承属性的顺序:它们按照相同的顺序规则在自己的属性后列出它们。但同样,没有指定顺序。)

最近,这种情况似乎有所改变

从实验上看,它现在看起来像是在遵循属性顺序

您可以为自己提供一个实用程序函数,用于创建一个新对象,并按字母顺序向其添加属性:

function logAlpha(obj) {
    const x = {};
    for (const key of Object.keys(obj).sort()) {
        x[key] = obj[key];
    }
    console.log(x);
}
当然,与
console.log(obj)
不同,这将是一个快照,而不是指向原始对象的实时链接


你可以做很多调整(包括原型属性,包括原型本身,包括完整原型链的排序版本等),但这就是要点。

对于子问题,。也许现在所有属性迭代方法的属性顺序都得到了保证,Chrome对其进行了更改,使显示的属性按保证的顺序排列。这肯定是最近的一个变化,现在我有机会做一些研究,是的,现在是ES2015,引擎在这方面遵循标准,对象属性是这样枚举的:数字键/道具按升序分组和列出,字符串和符号键按添加的顺序列出。这是为了保证循环在不同的浏览器中运行相同。8/我的Chrome 81更新已更改/修复属性,以便再次在控制台中按字母顺序排序。我不知道引擎是否按照添加到对象的顺序进行解析,但显示为字母顺序,或者在控制台打开时是否重新排列为字母顺序,等等。我只是想分享一下。我相信问题/希望/愿望是,当Chrome在最新版本中添加此更改时,他们提供了一个重新启动的环境——这是我的希望。查看了所有控制台设置后,我发现没有切换属性排序的选项。8/@Chaos7703-这太糟糕了,它可能是一个不错的选择。不幸的是,这似乎是在ES2015标准中;我不认为这会成为一种选择。@Chaos7703-我不明白为什么不。标准没有说明如何在控制台中显示内容。:-)