console.log 的奇怪问题

Strange issue with console.log

const myFather = {
  name: 'John',
  age: 78,
  getDetails: function () {
    return 'The name of my father is ' + this.name + ' and he is ' + this.age + ' old.'
  }
}

如果我 运行 下面的代码行,我会按预期得到 true:

console.log(myFather.__proto__ === Object.prototype)

如果我 运行 这个,我会得到预期的文本:

console.log('myFather.__proto__ === Object.prototype:')

但是如果我 运行 这个,我得到的只是错误的。连文字都不显示:

console.log('myFather.__proto__ === Object.prototype:' + myFather.__proto__ === Object.prototype)

我不明白为什么?

听起来像是运算符优先级的情况?如果将第二部分括在括号中是否有效,例如

console.log('myFather.__proto__ === Object.prototype:' + (myFather.__proto__ === Object.prototype))

运算符优先级,如 MDN 或其他 JS 核心文档中所述,定义了运算符的计算顺序。在大多数情况下,此列表并不那么有趣,因为一个语句中的简单赋值可能不会使用多个不同的运算符。但在您的情况下,有一个 + 运算符和 === 运算符。加法运算符比等于运算符具有 更高的 优先级,这意味着:它首先被评估。因此,这些是您的日志调用的内部步骤,逐行:

console.log('myFather.__proto__ === Object.prototype:' + myFather.__proto__ === Object.prototype)

console.log('myFather.__proto__ === Object.prototype:[object Object]' === Object.prototype)

console.log(false)

你实际上是这样做的:

console.log( ('myFather.__proto__ === Object.prototype:' + myFather.__proto__) === Object.prototype);

所以这个相等的结果是false