为什么我需要在JavaScript中转义'/'字符?

时间:2010-01-31 05:01:31

标签: javascript

究竟需要在javascript字符串中进行转义。或者,更具体地说,为什么

var snaphtml = '<script src="http://seadragon.com/embed/lxe.js?width=auto&height=400px"></script>';

给出语法错误?转义最终<\/script>似乎修复了语法错误,但这对我作为javascript初学者没有意义。

4 个答案:

答案 0 :(得分:11)

问题可能是网络浏览器看到“</script>”序列并判定这是脚本块的结尾。

除了像你一样使用转义序列之外,解决问题的另一种方法是将它分成两个串联的字符串:

"<" + "/script>" 

您所看到的行为不是浏览器中的错误。

浏览器不会“查看”脚本块,它们只是将内容传递给脚本引擎。 “</script>”序列是他们知道他们已经到达块的末尾的方式,并且因为浏览器不解释块的内容,所以它无法知道它是在上下文中脚本代码中的文字字符串。

请记住,浏览器可以支持比Javascript更多的脚本语言,即使它不常见。 Internet Explorer支持VBscript(我认为任何脚本语言都可以由Windows脚本主机运行,但我不确定)。当具有脚本块的能力被放入浏览器的时候,没有人可以确定Javascript最终会如此普遍。

答案 1 :(得分:4)

您实际上遇到了一个html转义问题:浏览器将字符串中的</script>解释为嵌入了javascript的script元素的close标记 - 所以对于浏览器,你的行似乎缺少关闭单引号:

var snaphtml = '<script src="http://seadragon.com/embed/lxe.js?width=auto&height=400px">

要修复它,正如您所发现的那样,您只需将</script>更改为其他任何内容,例如<\/script>\074/script>等。

你通常需要在javascript字符串中担心的唯一字符是双引号(如果你引用带双引号的字符串),单引号(如果你用单引号引用字符串)引号),反斜杠,回车符(\ r)或换行符(\ n)。

答案 2 :(得分:2)

HTML解析器将解释字符串中标记令牌(ETAGO定界符</)的结尾,作为当前脚本标记的末尾,为您提供未终止字符串 {{1 }}

有几种解决方法,包括使用SyntaxError块,但最简单的方法是转义该字符,或者进行字符串连接:

CDATA

当然,您也可以通过编程方式创建var snaphtml = '<script src="...">\x3C/script>'; var snaphtml = '<script src="..."><' + '/script>'; 元素并将其附加到头部:

script

答案 3 :(得分:1)

有关详细说明,请参阅 Everything you always wanted to know about </, aka. the end-tag open (ETAGO) delimiter 。 TL; DR没有必要像字符串连接或char字面转义那样疯狂的黑客 - 只是逃避它:

var snaphtml = '<\/script>';

另请注意,这仅适用于内联脚本。