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

How can I make object properties in console.log(obj) display alphabetically in Chrome?

以前是这样的,当我用console.log(obj)在Javascript中显示对象的属性时,属性会按字母顺序显示。最近,这种情况似乎有所改变。我假设新顺序更接近属性在代码中的实际存储方式,(尽管我的印象是对象属性没有 "real" 固定顺序开始)。

但是,对于大型、复杂的 类,按字母顺序显示对于找到我正在寻找的 属性 非常有用。是否有一个选项可以让属性像以前一样按字母顺序显示?

(我也想知道属性的当前顺序是什么 "represents" 以及它首先是如何确定的。)

though I was under the impression that object properties didn't have a "real" fixed order to begin with

从 ES2015 开始,他们这样做了(甚至以前免除的操作现在也被纳入了行列),但您可能希望继续表现得好像他们没有这样做。对于自己的属性,这是它们添加到对象的顺序(整数索引 属性除外,这些属性按数字顺序列在其他属性之前); this question 的答案中有详细信息。 (继承属性没有定义的顺序,尽管引擎对它们的处理方式相当一致:它们在自己的属性之后列出它们,遵循相同的顺序规则。但同样,没有指定。)

Recently, this seems to have changed.

从实验上看,它现在看起来像在遵循 属性 命令。

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

function logAlpha(obj) {
    const x = {};
    for (const key of Object.keys(obj).sort()) {
        x[key] = obj[key];
    }
    console.log(x);
}

当然,与 console.log(obj) 不同的是,那将是快照,而不是原始对象的实时 link。

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