【发布时间】:2021-04-30 04:44:04
【问题描述】:
在下面的示例中,我有两个 console.log,每次都得到不同的答案(尽管我希望得到相同的答案)。
class Dog {
constructor(name, gender) {
this.name = name;
this.gender = gender;
}
toString() {
return this.name;
}
}
let maxi = new Dog('john', 'male');
console.log(maxi) // Dog { name: 'john', gender: 'male' }
console.log(`${maxi}`); // john
在第一个示例中,我似乎在记录对象的类型及其属性。然而,在第二个示例中,我的自定义 toString() 方法似乎被用于将对象转换为字符串。
为什么不一样?文档中是否有地方解释了为什么字符串文字使用 toString() 方法将对象转换为字符串,而 console.log() 没有。另外,console.log() 甚至在哪里拉取对象的这个字符串表示?
谢谢!
【问题讨论】:
-
console.log(maxi)不记录对象的字符串表示形式。对象和原型链的表示取决于浏览器。但是,它记录对对象的引用。如果要更新对象,如果您在控制台中展开先前记录的对象,它将显示更新的属性。 -
toString行为是预期的。每当对象被强制为字符串时,它就会调用对象上的toString方法:MDN: Overriding the default toString method -
@adiga 和 console.log() 不强制使用字符串? console.log 如何打印对对象的引用?
-
@bugsyb 在哪个环境下,node.js还是浏览器还是别的什么?正如阿迪加所说,在调试器中
console.log不会打印文本,而是显示对象的实时表示,您可以在事后检查。
标签: javascript javascript-objects tostring