当前位置: 首页 > 知识库问答 >
问题:

console.log调用对象的toString方法吗?

屠浩
2023-03-14

根据这个留档,

这些对象中的每一个的字符串表示都按照列出的顺序附加在一起并输出。

同样根据答案

x将对象x强制为一个字符串,即[object object]:

所以,我的问题是

如果我这样做

str = new String("hello")
console.log(str) //prints the string object but not 'hello'
console.log(""+str) //prints "hello"

因此,在第一种情况下,它只打印对象(不调用toString()方法)。

但是在第二种情况下,它不强制而是简单地打印原始值。为什么会这样呢?

哪种方法不支持控制台。log调用以打印对象?

请注意-这不是这个问题的重复。

共有3个答案

乐城
2023-03-14

这是更多的类型,但也将调用obj.toString()

console.log(`${obj}`);
和谦
2023-03-14

它不利用toString,您可以这样做

clog = function(msg){console.log(msg.toString());}
clog(myObj);
席弘图
2023-03-14

控制台API不是任何规范中定义的标准API,而是跨所有浏览器实现的API,因此供应商通常可以自由地以自己的方式实现,因为没有标准规范来定义API中任何方法的输出。

除非检查特定浏览器的控制台API的实际实现,否则永远无法确定。GitHub上有一个跟踪程序,列出了主要浏览器实现之间的差异。

如果您查看FF中的实现(可在此处找到-搜索日志),它下面有一条注释

为供人类使用而设计的对象的多行字符串化

实际实现检查传递给log()的参数类型,并根据其类型生成不同的表示形式。

对于您的情况,log()为使用literal符号创建的字符串和使用String构造函数创建的字符串打印两个不同的值,因为它们是两种不同的类型。如本文所述,使用文字符号创建的字符串称为字符串原语,使用字符串构造函数创建的字符串称为字符串对象

var str1 = 'test';
var str2 = new String('hello');

typeof str1 // prints "string"
typeof str2 // prints "object"

由于类型不同,它们的字符串表示在控制台API中也不同。如果您浏览FF控制台实现的代码,最后一条语句是

return "  " + aThing.toString() + "\n";

因此,为了回答您的问题,仅当参数类型不是{undefined,null,object,set,map}类型时,FF中的控制台API才会对参数调用toString()。它并不总是调用toString()valueOf()方法。我没有检查Chrome的实现,所以我不会对此发表评论。

 类似资料:
  • 7.2.3 对象方法的调用 一旦创建了对象,就可以通过向对象发消息来调用对象的方法。消息的格式如下: <对象>.<方法>(<实参>) 其含义是请求<对象>执行<方法>,方法定义中列出的形式参数由<实参>提供。 例如,接着前面的例子执行如下语句: >>> p1.whatName() My name is Lucy >>> p2.whatName() My name is Tom >>> p2.ho

  • 本文向大家介绍javascript中Number对象的toString()方法分析,包括了javascript中Number对象的toString()方法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了toString()方法的定义和用法。分享给大家供大家参考。具体分析如下: 此方法可以把Number对象转换成字符串,并返回此字符串。 语法结构如下: 参数列表: 参数 描述 radix

  • 问题内容: 有什么方法可以影响console.log提供的自定义对象吗?我试图覆盖customObject.prototype.toString方法,但这没有用。 有任何想法吗? 问题答案: 在node.js中,调用每个参数时不使用格式占位符。因此,如果在对象上定义方法,则将调用该方法以获取对象的自定义字符串表示形式。 例如: 输出: foo = BAR 或使用课程:

  • 每个类都直接或间接地继承自类。 类有一个重要的方法,最常被重写:。 问题是:对于类,重写此方法是否会违反Liskov替换原则? 我举个例子。 显然,如果我用替换,系统的行为就会改变。

  • 问题内容: 下面的代码将控制台日志打印到页面上。它记录来自服务器的获取和响应,例如: 与其将这些内容显示在页面上,我不希望计算每个响应和请求,因此您会看到一个从1开始到结束为止的数字,可以是任何数字。这是为了向用户显示正在发生的事情,而没有向他们显示所有响应并获取数据。 和html: 问题答案: 如果您只想覆盖以打印响应计数,则应该这样做,但这将增加任何呼叫的计数。 如果您希望依靠响应而不是所有控

  • 问题内容: 我的一位教授曾经说过,绝不应该执行以下代码: System.out.println(object.toString()); 他说(我相信引用为“ Effective Java”)会引起重复调用。由于print语句调用对象的toString方法,因此两次调用toString方法的效率较低。首选方法是仅使用: System.out.println(object); 显然,这种方式在代码中看