在Javascript中添加双引号

5
我希望了解那段代码背后的逻辑:
var myName = "John";

document.write("\""+ myName +"\"");

我得到了我想要的,也就是浏览器显示带双引号的“John”,但我不明白为什么我要在字符串前后使用+号以及为什么需要以这种方式使用转义序列。


使用加号 "+" 连接字符串,并使用转义序列来转义双引号,以便它能够与字符串一起打印。 - Suchit kumar
你也可以使用 '"' + myName + '"'。在双引号外使用单引号,这样就不必转义中间的双引号了。 - mador
1
如果你正在跟随一个教程并且它使用了 document.write,那么现在就停止吧。毫无疑问,这将会非常过时:在2017年,document.write 的用途几乎为零。 - lonesomeday
@lonesomeday 这不是真的,当我懒得按F12时,我经常在JSFiddle中使用它。 - CoryG
@CoryG 但是document.writeconsole.log多三个字符,所以实际上你会浪费更多的精力。而且它也不如console.log好用——它只适用于数字和字符串。 - lonesomeday
好的,如果算上F12键,那就是2个字符,但对我来说更大的问题是“门道效应”,因为我必须集中注意力在一个之前不存在的窗口上,这会让我忘记刚才在做什么。 - CoryG
6个回答

12

你的代码容易受到字符串注入攻击!如果myName中包含引号,会发生什么?

相反,你应该使用JSON.stringify

var myName = 'John"abc';
'"' + myName + '"';     // "John"abc"
JSON.stringify(myName); // "John\"abc"

你可能也需要转义 U+2028 和 U+2029。


5

加号用于连接字符串,反斜杠用于告诉JS:“嘿,这不是结束的双引号标记,我想要实际的符号”。您还可以同时使用双引号和单引号。

var myName = 'John';
document.write('"' + myName + '"');

Js Fiddle


这真的很有帮助。' " '只是等同于 "" ",然后我需要通过 + 将其连接到字符串中。 - AP_1984
是的,完全正确。如果你想打印单引号,可以用双引号括起来 " ' "。虽然在代码中只使用一种引号更好(看起来更整洁),但两种都可以使用。 - Jorge Anzola

2
转义字符\像是对编译器的提示。
通过指定转义字符,编译器知道接下来的"字符是字符串,而不是你的程序代码的一部分。
例如,编译器会将字符串"helloWor\"ld"视为"helloWorld"。
运算符+作为字符串连接运算符。也就是说,编译器将尝试将两个字符串合并成一个。
例如"he" + getString() + "llo"将给出heXXXllo,假设函数getString()返回值XXX

2
你可以使用 JSON.stringify 来实现相同的效果。或者使用 "'" + myName + "'",不需要转义字符。
你之所以需要做这个操作,是因为在指定 "John" 时,引号并不是字符串的一部分。它们只是一点语法,告诉编译器其中的内容是一个字符串字面量(与从用户或其他数据源读取不同)。但是,该值本身只是 John,没有引号。当你打印它时,JavaScript 只会打印出 John。你需要自己添加引号或任何其他修饰。

1
在JavaScript中,字符串是用单引号或双引号括起来的字符。如果您想在字符串中使用实际的单引号/双引号,则必须“转义”它。这可以通过反斜杠字符完成。解决方法是使用与字符串内部使用的不同包装引号。请参见下面的示例: document.write("\"" + myName + "\""); // 转义 document.write('" + myName + "'); // 未转义 加号字符用于连接字符串。在您的示例中,引号加变量加引号执行为“John”。

0
请参考一些基础书籍或w3schools了解JS的基础知识。
var myName = "John";

这里myName的值为John,不带引号。引号是JS识别任何字符串的方式。在JS中,引号内的任何文本都被识别为字符串。

现在,当您想要显示引号时,您需要将引号作为字符串的一部分。

因此,"\"""基本上是将(")覆盖在引号周围。在JS中,(+)加号用于连接两个字符串。

希望这解答了您的问题!


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