为什么有些console.log打印出typeof 1作为数字,但有时打印出" number" (引)?

时间:2017-02-25 08:42:00

标签: javascript google-chrome safari typeof

在当前的Google Chrome v56.0和Safari v9.1中都是如此:

在调试器控制台中,如果我输入:

> console.log(1, typeof 1)
  1 "number"

> console.log("1", typeof 1)
  1 number

为什么第一个"number"而第二个number? (也就是说,为什么第一个被引用但第二个不是?

3 个答案:

答案 0 :(得分:0)

看起来它需要调用toString(在必要的地方)作为将下一部分显示为字符串的模式。

没有引号

console.log("1", typeof 1)
    1 number

console.log("", typeof 1)
    1  number

console.log("0", typeof 1)
    0 number

带引号

console.log(1, typeof 1)
    1 "number"

console.log({}, typeof 1)
    1 Object {} "number"

console.log(false, typeof 1)
    1 false "number"

console.log(true, typeof 1)
    1 true "number"

console.log([], typeof 1)
    1 [] "number"

console.log(() => true, typeof 1)
    1 () => true "number"

console.log(/./, typeof 1)
    1 /./ "number"

答案 1 :(得分:0)

这不仅仅是typeof,与console.log(1, "1");& console.log("1", "1");

我认为它会在那里加上引号,因为当你打印两种不同的类型时,它会为你区分它们。

答案 2 :(得分:0)

如果我们查看MDN上的the console.log页面,它会解释:

  

obj1 ... objN
  要输出的JavaScript对象列表。每个对象的字符串表示形式按列出和输出的顺序附加在一起。

所以在第一个例子中,它组合了一个整数(1)和一个字符串(typeof 1)。因为有一个整数,它将两个值组合在一起,然后将它们转换为字符串。所以1现在等于字符串; 1typeof 1现在等于typeof 1 "number"的输出字符串。
因此,结果字符串为1 "number"

在第二个示例中,1已经是一个字符串,因此它既不会转换为字符串,也只是简单地将它们连接起来,因此结果如预期的那样; 1 number