我正在阅读一本书,然后读到了这句话:「HTML解析器不知道你的JavaScript代码是什么,它把它当做其他文本一样处理。」所以如果我们写成这样:
我们遇到错误是因为
那么屏幕上没有显示任何“hello world”?根据之前的例子,HTML解析器应该也会把那个字符串视为HTML标签,但它没有?有人能解释一下吗?对不起我的英语不好 :(
<script type="text/javascript">
alert("first");
var string = "</script>";
</script>
我们遇到错误是因为
"</script>"
作为HTML解析器的闭合标签,而第二行</script>
作为脚本结束标记,导致该脚本标签被执行,从而产生了错误。Uncaught SyntaxError: Unexpected token ILLEGAL
即使第一个 alert()
没有被执行?我不知道为什么?但我的主要问题是,如果 "</script>"
被视为标签,那么当我们写类似这样的内容时:
var str = "<h1> hello world </h1>";
那么屏幕上没有显示任何“hello world”?根据之前的例子,HTML解析器应该也会把那个字符串视为HTML标签,但它没有?有人能解释一下吗?对不起我的英语不好 :(
</script>
结束,因此脚本以未关闭的"
结束,这是一个编译错误。 - slebetman<script>
标签,逐字扫描文本,直到找到闭合的</script>
标签。然后将该文本传递给 JavaScript 解释器。由于 DOM 解析器只能识别标记而不能识别 JavaScript 语法,所以标记在字符串声明内部关闭。 - slebetmanvar string = "</sc" + "ript>";
,这样可以使代码更安全,避免被浏览器解析为脚本标签的结束符。 - Loïc Faure-Lacroix