Javascript 为什么有些console.log会将typeof 1打印为number,但有时会打印为";“数字”;(引述)?

Javascript 为什么有些console.log会将typeof 1打印为number,但有时会打印为";“数字”;(引述)?,javascript,google-chrome,safari,typeof,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?(也就是说,为什么第一个部分被引用,而第二个部分没有被引用?它似乎将调用toString(如果需要)作为模式,以字符串形式显示下一部分 无报价 引用 它不

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

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

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

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

为什么第一个
是“number”
,而第二个是
number
?(也就是说,为什么第一个部分被引用,而第二个部分没有被引用?

它似乎将调用
toString
(如果需要)作为模式,以字符串形式显示下一部分

无报价

引用


它不仅是typeof,还适用于
console.log(1,“1”);
&
console.log(“1”,“1”);

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

如果我们看一下MDN上的页面,它会解释:

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

因此,在第一个示例中,它将一个整数(
1
)和一个字符串(
typeof 1
)。因为有一个整数,所以它将两个值合并,然后将它们转换为字符串。因此
1
现在等于字符串;
1
,而
typeof 1
现在等于
typeof 1
输出的字符串,即
“number”

因此,结果字符串是
1“number”


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

它不是用来引用的。我认为这是一个视频或特定的问题。我与控制台的结果相同(正如oposite我首先写的)好的,我删除了那个注释。这是他们语法突出显示中的一个奇怪的差异…如果是字符串,日志的第一个参数将始终是黑色的,那么下面所有的字符串参数也将是黑色的。但是如果第一个参数是任何其他类型,那么下面所有的字符串参数都是红色的,带引号。例如
log(“1”,1,“1”)
字符串是黑色的,
log(null,“1”,“1”)
字符串是红色的,
log(“1”,null,“1”)
字符串是黑色的。控制台的行为不是标准化的(即,它依赖于实现)。您为什么关心这些差异?typeof总是返回一个字符串,无论它是否表示为
“number”控制台中的
或编号并不特别重要。控制台没有标准化。MDN是一个公共wiki,虽然其中的建议很有帮助,但并不明确,对于实现而言–特定主题对于某些浏览器可能不正确。
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"