gur*_*372 24 javascript string object console.log
根据此文档,
每个对象的字符串表示按列出和输出的顺序附加在一起.
也作为答案
+ x将对象x强制转换为字符串,这只是[object Object]:
所以,我的问题是
如果我做
str = new String("hello")
console.log(str) //prints the string object but not 'hello'
console.log(""+str) //prints "hello"
Run Code Online (Sandbox Code Playgroud)
因此,在第一种情况下,它只是打印对象(不调用该toString()方法).
但在第二种情况下,它不是强制而是简单地打印原始值.为什么会这样?
console.log调用哪个方法来打印对象?
请注意 - 这不是这个问题的重复.
Ark*_*tos 14
Console API不是任何规范中定义的标准API,而是在所有浏览器中实现的标准API,因此供应商通常可以自己实现,因为没有标准规范来定义API中任何方法的输出.
除非您检查特定浏览器的Console API的实际实现,否则您永远无法确定.GitHub上有一个跟踪器列出了主要浏览器的实现之间的差异.
如果你看一下FF中的实现(这里可用- 搜索日志),下面有一条评论
对象的多行字符串化,专为人类使用而设计
实际的实现检查传递给log()它的参数类型并基于它的类型,它生成一个不同的表示.
在您的情况下,log()为使用literal符号创建的字符串和使用String构造函数创建的字符串打印两个不同的值,因为它们是两个不同的types.正如解释在这里,用文字符号的字符串创建调用String Primitives和使用字符串构造函数创建的字符串被称为String Objects.
var str1 = 'test';
var str2 = new String('hello');
typeof str1 // prints "string"
typeof str2 // prints "object"
Run Code Online (Sandbox Code Playgroud)
由于类型不同,它们的字符串表示在Console API中有所不同.如果您查看FF控制台实现的代码,最后一个语句是
return " " + aThing.toString() + "\n";
Run Code Online (Sandbox Code Playgroud)
因此,要回答您的问题,FF中的Console API toString()仅在参数类型不是{undefined,null,object,set,map}类型之一时调用参数 .它并不总是调用toString()或valueOf()方法.我没有检查Chrome的实现,所以我不会对此发表评论.
| 归档时间: |
|
| 查看次数: |
10210 次 |
| 最近记录: |