javascript 字符串不能包含尖括号吗?

2020-04-15 11:55:01 +08:00
 onice
var html = "<script></script>";

这行总是报错,把第二个<去掉就不报错了。为什么呢?尖括号不需要转义的啊??

2919 次点击
所在节点    程序员
12 条回复
longgediyi999
2020-04-15 11:56:40 +08:00
``
longgediyi999
2020-04-15 11:57:19 +08:00
建议先去学一波 es6
littleylv
2020-04-15 11:57:57 +08:00
..
ksedz
2020-04-15 12:01:00 +08:00
vs 提示的问题,代码没错误
最近我也遇到了,看着不爽
mercury233
2020-04-15 12:02:32 +08:00
html 里</script>优先闭合脚本标签,部分浏览器看到的只有半截 js
lsvih
2020-04-15 12:04:03 +08:00
ide 的问题吧
SunriseFox
2020-04-15 12:04:43 +08:00
不是 JavaScript 的问题,而是 XML 的问题
不是不能包含尖括号,而是 </script> 闭合了 <script>

= =

你这个代码被解析后就是

<script>... ' ... </script>

'

</script>

当然是不行了... 需要转义为 <\/script>
libook
2020-04-15 12:21:19 +08:00
5 楼和 7 楼是正解。
HTML 引擎和 JS 引擎是两个独立的引擎,HTML 源码会由 HTML 引擎优先解析,解析到 script 标签的时候,HTML 引擎会把<script>和后面第一个遇到的</scriipt>字符串之间的字符串交给 JS 引擎来解析。
虽然你的</script>在 JS 的字符串值内部,但对于 HTML 引擎来说,它并不认识 JS 代码,它就只是憨憨地在<script>后面找第一个遇到的</script>字符串。这样的话你的代码里,截取<script>到第一个</script>字符串之间的不是一段有效的 JS 代码,而之外的也不是有效的 HTML 代码。

举例:
源代码是:

<script>
html='<script></script>'
</script>

HTML 引擎交给 JS 引擎解析的是:

html='<script>

上面 JS 字符串缺失后面的引号,所以不是合法的 JS,HTML 留下的代码是:

'
</script>

首先第一行留下一个残缺的单引号,所以 HTML 就认为这是一段 text,就直接输出这个单引号字符;同时因为在</script>之前没有与之配对的<script>起始标签,所以后面这个闭合标签是不合法的 HTML 。
xmadi
2020-04-15 12:52:31 +08:00
编辑器识别的问题 换一个
yafoo
2020-04-15 13:06:39 +08:00
以前"</scr"+"ipt>"这样写过代码
onice
2020-04-15 15:56:18 +08:00
@libook 感谢解答。
otakustay
2020-04-15 16:36:53 +08:00
最简单的是<\/script>就行了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/662589

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX