实际字符串字符与console.log显示内容之间的javascript差异

实际字符串字符与console.log显示内容之间的javascript差异,javascript,alert,console.log,Javascript,Alert,Console.log,当我将此值赋值为“some\n some more”并console.log()时,新行字符不会出现在输出中 “这是第一行\n这是s e c o d” 给予 “这是第一行\n这是s e c o d” 或console.log(“这是第一行,\n这是s e c o n d”) 同样的 但alert(“这是第一行,这是s e c o n d”)显示了换行符 为什么???\n是新行字符的JavaScript转义码。每当该字符串包含在将由JavaScript引擎解析的字符串中时,代码就会生成一行新行。当

当我将此值赋值为“some\n some more”并console.log()时,新行字符不会出现在输出中

“这是第一行\n这是s e c o d” 给予 “这是第一行\n这是s e c o d”

或console.log(“这是第一行,\n这是s e c o n d”) 同样的

但alert(“这是第一行,这是s e c o n d”)显示了换行符
为什么???

\n是新行字符的JavaScript转义码。每当该字符串包含在将由JavaScript引擎解析的字符串中时,代码就会生成一行新行。当您在alert()中使用该代码时,JS引擎将解析该代码并将其发送到带有新行字符的警报。但是,当您将其发送到控制台时,会绕过JS引擎,并使用浏览器对其控制台的特定实现

一个更简明的例子是:

    alert("This is a \n test");
    someParagraphElement.innerHTML = "This is a \n test";

在第二行代码中,没有生成新行,因为该行将字符串发送到HTML解析器,其中\n只是另一个要忽略的空白字符。

在不知道您所指的浏览器的情况下,我认为开发人员会共同努力保持日志窗口简洁(每个事件/调用一行).我已经在Chrome48、IE11和Firefox44.02上进行了测试。它们都在\n处中断。没有控制台显示是WYSIWYG,它是一种格式化的输出,既美观又具有欺骗性。更进一步地说,
alert()
现在在大多数浏览器中是更高级的,例如:
alert(“Hello\n\tWorld”)
在ch/win上不缩进第二行,但在FF/win上缩进…@Prabhas
alert(“ab\u000Ac”)
渲染什么?@Stack0verflow:如果有更多的内容被记录,控制台可以改变它的显示。例如:
console.log([“line1\nline2”])
它们没有。警报是通过窗口对象实现的,控制台是专有的。
window.hasOwnProperty(“控制台”)
@ScottMarcus“在第二行代码中,没有生成新行,因为该行将字符串发送到HTML解析器,其中\n只是另一个要忽略的空白字符。”,
pre
textarea
元素,
css
空白:其他元素的pre
\n
作为换行符进行校正,但所有其他元素都没有,这两个元素起作用的唯一原因是,该字符在该上下文中具有某种意义。在控制台的上下文中,该字符代码并不适用。@dandavis您缺少的是,当Chrome将控制台对象添加到窗口时,它是专有的,不同于alert、XmlHttpRequest或任何其他标准和事实上的标准。