5

在 Chrome 中,以下

console.log(true, '\t');

将打印

true "  "

为什么周围有报价?

(注意console.log(true + '', '\t')只会打印true,就像console.log('a', '\t');只会打印一样a。)

4

2 回答 2

11

基本上,console.log 有两个重载:

console.log(formatString, args)console.log(arg1, arg2, ...)

更具体地说,根据源代码,如果第一个参数是字符串,则它将其视为其他参数的格式字符串。否则,直接输出每个参数。

因此console.log(true + '', '\t')输出 'true' 因为第一个参数是字符串并且没有占位符\t, 并且console.log(true, '\t')将输出两个参数因为true不是字符串。

于 2012-08-27T18:36:22.520 回答
2

我决定玩弄它

console.log(true, '\t');
true "  "

然后我尝试了相反的方法

console.log(false, '\t');
false " " 

不知道为什么,但是 false 只返回一个空格,而 true 则返回两个 o_O ... 此外,如果\t是在开头,则没有问题

console.log('\t', true);
     true

它之后发生的事情也无关紧要,但如果第一个参数通常是布尔值,似乎会影响所有带有引号的转义选项卡。

console.log(false, '\t', '\t');
false " " " "

所以它肯定与第一个参数是布尔值有关,因为如果你用字符串尝试它,它的行为完全正常。我猜它与谷歌浏览器有点奇怪?我需要找到源代码才能真正看到它。

于 2012-08-27T18:50:31.077 回答