JavaScript中单引号和双引号的转义字符

5

我有一个关于JavaScript中转义字符的问题,希望你能帮忙解答。比如说我有以下JavaScript代码:

document.write("<img src=\"http://www.google.com\" />");

现在在上面的例子中,您可以看到我用双引号"开始了document.write,因此我需要转义<img src="" />内的引号,以确保JavaScript仍然认为它是一个字符串。
但是在下面的例子中,您可以看到我使用单引号'开始document.write语句。我的问题是是否仍然需要转义双引号?我知道该语句将在没有转义的情况下工作,但最佳实践是什么?
document.write('<img src=\"http://www.google.com\" />');  

我问的原因是,我写了一个条件语句,触发一张图片(如上方所述),但它似乎无法正常工作,为了排除所有可能导致这种情况的可能性。我几乎每天都会遇到这样的事情,任何帮助都将不胜感激。这可能是一个愚蠢的问题,提前道歉...

我投票认为这个问题不应被标记为重复,因为它所指的主要问题并没有要求也没有涵盖关于“最佳实践”的讨论,而在这篇文章中,最佳实践的问题得到了详细的阐述。 - Eric Hepperle - CodeSlayer2010
5个回答

13

使用单引号时,您只需要转义单引号,而不是双引号。

(编辑:反之亦然!)


第二个例子中转义双引号有什么问题吗?如果我这样做会发生什么?谢谢。 - zik
除了谷歌网站没有返回图像外,这段代码没有问题! - Tim
哈哈,是的,可能不是一个好的例子,但你明白我的意思了。谢谢回复。 - zik

3
document.write('<img src="http://www.google.com" onClick="foo(\'bar\');" />'); 

您只需要转义您正在使用的相同类型的引号。


嘿,如果我有 var data = "bar";并且我想在 \ 'bar\' 的位置使用这个变量怎么办?我明白你在这里试图说什么...但我的情况是这样的,我必须在 \bar\ 的位置使用变量。 - HIRA THAKUR
@Digital_at_heart - 引号的定义方式并不重要。'<img src="blah.gif" oncClick="foo('\' + data + ''\);" />'; - OptimusCrime

3
到现在为止,你已经明白了:不需要转义你没有用作该特定字符串分隔符的引号。然而,最佳实践是另一回事。我知道有些人会告诉你“总是转义引号”是一个好习惯。我不同意。与其他一些语言不同,JavaScript在处理转义字符时相对宽容:在你的第二个例子中,反斜杠不会被打印出来。但并非总是如此,所以我的建议是:在使用引号(单引号||双引号)时保持一致,并且仅转义那些需要转义的引号。根据你使用的其他语言,你可能需要考虑一下要使用哪种引号。例如,如果你使用PHP,请坚持使用单引号,因为双引号不仅限定字符串。如果你习惯于编写类C语言(或Java),最好保持使用双引号的习惯,因为在这些语言中,单引号和双引号之间的差异更大。

谢谢。我倾向于在JavaScript中使用双引号以保持一致性,但我想对于像JavaScript这样的语言来说,使用单引号更容易遵循! - zik
2
总的来说,是的,特别是如果你正在将新元素创建为字符串,你可以轻松地坚持使用双引号,并使用 var newImg = document.createElement("img"); 这样分配它的属性:newImg.src = "http://www.google.com"; 从而整洁地避免转义字符串分隔符或混合引号类型。 - Elias Van Ootegem

1

document.write('<img src="http://www.google.com" />'); 可以正常工作。

对于 document.write("<img src='http://www.google.com' />"); 同样适用。


0
<html>
<body>

<script type="text/javascript">

document.write(escape("<img src=\"http://www.google.com\" />"));

</script>

</body>
</html>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接