Javascript 为什么浏览器在一个空的body元素中插入两个换行符?

Javascript 为什么浏览器在一个空的body元素中插入两个换行符?,javascript,html,Javascript,Html,有时HTML中的空白会引起严重的问题。因此,我想知道为什么Chrome和Firefox在一个空的body元素中插入两个换行符 加载带有 <body></body> 或者同等地 <body /> 给出一个包含两个换行符的主体: document.body.outerHTML // <body>↵↵</body> document.body.firstChild // #text, 2 linefeeds document.b

有时HTML中的空白会引起严重的问题。因此,我想知道为什么Chrome和Firefox在一个空的body元素中插入两个换行符

加载带有

<body></body>

或者同等地

<body />

给出一个包含两个换行符的主体:

document.body.outerHTML // <body>↵↵</body>
document.body.firstChild // #text, 2 linefeeds
document.body.outerHTML//↵↵
document.body.firstChild/#text,2个换行符
将innerHTML或outerHTML设置为“”或删除textnode子项会产生一个真正的空正文

document.body.outerHTML // "<body></body>"
document.body.outerHTML/“”

为什么浏览器会神奇地插入这两个换行符?

您会看到HTML中其他地方的换行符(在
标题之前,在
标题和
正文之间)。如果删除所有换行符(在
之前和
之后),则正文中不会有任何换行符


原因可能很大程度上与容忍无效标记有关,但它现在已被编码:全部细节在规范中。例如,请注意,进程和空格都是由.

“…或同样的
..”组成的,仅供参考,这只是一个在HTML中没有结束体标记的开始体标记。(这在XHTML中是一个封闭的标记,但您可能没有使用XHTML。)让我试试看,这与我观察到的身体后面的脚本标记出现在身体内部相吻合,至少在chrome中是这样。@citykid-“…身体后面的脚本标记…”如果您指的是
之后和
之前的
脚本标记,那是无效的(但浏览器将允许它移动到
正文
)。不能将
脚本
作为直接子项。