【问题标题】:Escaping characters in JavaScript single and double quotes [duplicate]JavaScript单引号和双引号中的转义字符[重复]
【发布时间】:2012-05-28 19:23:30
【问题描述】:

我有一个关于在 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\" />');  

我问的原因是我写了一个条件语句,它会触发一个图像(根据上面的行),但它似乎没有工作,并排除了所有可能的可能性造成这种情况。我几乎每天都会遇到这样的事情,所以任何帮助都将不胜感激。这可能是一个愚蠢的问题,所以提前道歉......

【问题讨论】:

  • 我投票认为这个问题不被标记为骗子,因为如果被称为主要问题的问题不要求 NOR 是否涵盖有关“最佳实践”的讨论,而在 (this) 中发布最佳实践的问题在适当的细节中进行了介绍。

标签: javascript escaping


【解决方案1】:

现在,您已经了解了情况:无需转义您未用作特定字符串分隔符的引号。但是:最佳实践是另一回事。我知道有些人会告诉你“总是转义引号”是养成的好习惯。我不同意。与其他一些语言不同,JavaScript 在转义字符方面相当宽松:在您的第二个示例中,不会打印出反斜杠。

情况并非总是如此,所以我的建议是:在使用的引号中保持一致(单 || 双)并仅转义需要转义的引号。 根据您使用的其他语言,您可能需要考虑一下您将使用哪些引号。例如,如果您使用 PHP,请坚持使用单引号,因为双引号不仅仅用于分隔字符串。如果您习惯编写类 C 语言(或 Java),最好保持使用双引号的习惯,因为这些语言中单引号和双引号之间的区别更大

【讨论】:

  • 谢谢。为了保持一致性,我倾向于在 JavaScript 中使用双引号,但我想像 JavaScript 这样的语言的单引号更容易理解!
  • 总的来说,是的,特别是如果您将新元素创建为字符串,您可以轻松地使用双引号,并使用 var newImg = document.createElement("img"); 并分配它的属性,如下所示:newImg.src = "http://www.google.com"; 因此巧妙地避免转义字符串分隔符或混合引号类型。
【解决方案2】:
<html>
<body>

<script type="text/javascript">

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

</script>

</body>
</html>

【讨论】:

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

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

    【讨论】:

    • 嘿,如果我有 var data= "bar" 怎么办;我想用这个变量代替\'bar\'?我明白你在这里想说什么..但我的情况是我必须使用变量代替`\bar`
    • @Digital_at_heart - 如何定义引号并不重要。 '&lt;img src="blah.gif" oncClick="foo('\' + data + ''\);" /&gt;';
    【解决方案4】:

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

    document.write("&lt;img src='http://www.google.com' /&gt;"); 的计数相同

    【讨论】:

      【解决方案5】:

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

      (编辑:反之亦然!)

      【讨论】:

      • 谢谢。在第二个示例中转义双引号有什么问题吗?如果我还是这样做了会怎样?
      • 没什么问题(除了 google.com 不返回图片!)
      • 哈哈,是的,这可能是一个不好的例子,但你明白我在说什么。感谢您的回复。
      猜你喜欢
      • 2012-12-27
      • 2016-04-19
      • 2016-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-06
      相关资源
      最近更新 更多