代码之家  ›  专栏  ›  技术社区  ›  Lone Learner

为什么console.log在某些情况下使用引号记录字符串?

  •  3
  • Lone Learner  · 技术社区  · 6 年前

    > console.log('foo', 'bar')
    foo bar
    undefined
    

    但当我同时打印字符串和数字时,它会打印带引号的字符串。

    > console.log(1, 'foo', 'bar')
    1 'foo' 'bar'
    undefined
    

    为什么会出现这种差异?我希望它在第二个示例中打印以下内容:

    1 foo bar
    

    铬70也可以观察到类似的行为。

    看起来像 console.log()

    > console.log('foo', 'bar', 1)
    foo bar 1
    undefined
    > console.log('foo', 1, 'bar')
    foo 1 bar
    undefined
    

    在某些情况下打印带引号的字符串,而在其他情况下不打印?

    2 回复  |  直到 6 年前
        1
  •  3
  •   Sara Chipps    6 年前

    这似乎是Chrome团队深思熟虑的选择。console.log在不同环境中的工作方式没有标准。

        2
  •  2
  •   Alex W    6 年前

    目前还没有一个合法的标准 console.log 但大多数浏览器,包括Chrome(即Chrome),都使用 working group specification (WHATWG) :

    https://console.spec.whatwg.org/#logger

    根据本规范,如果您有不同数量的参数,则根据当前规范使用不同的方法输出数据:

    1. 如果 args 是空的,返回。

    2. 第一 args[0] .

    3. 休息

    4. 如果 休息 是空的,执行 Printer(logLevel, « first »)

    5. 如果 第一 Printer(logLevel, args) .

    6. 否则,执行 Printer(logLevel, Formatter(args)) .

    7. 回来 undefined .

    最终,参数的数量决定了用于输出信息的方法。具体来说,在您的示例中,第一个参数不能包含格式说明符,因为它是一个数字,所以会传递给 Printer() 但是,如果第一个参数是字符串,那么它将传递给 Formatter() .

    因此,您会根据顺序获得不同的输出:

    > console.log('hello',1,'hello')
    hello 1 hello
    

    > console.log(1,'hello','hello')
    1 "hello" "hello"
    

    最终,这些方法输出信息的方式取决于实现/浏览器:

    实现如何打印args取决于实现,但是 实现应该用一个空格或其他东西来分隔对象 类似的,因为这已经成为开发人员的期望。