我希望了解那段代码背后的逻辑:
var myName = "John";
document.write("\""+ myName +"\"");
我得到了我想要的,也就是浏览器显示带双引号的“John”,但我不明白为什么我要在字符串前后使用+号以及为什么需要以这种方式使用转义序列。
var myName = "John";
document.write("\""+ myName +"\"");
我得到了我想要的,也就是浏览器显示带双引号的“John”,但我不明白为什么我要在字符串前后使用+号以及为什么需要以这种方式使用转义序列。
你的代码容易受到字符串注入攻击!如果myName
中包含引号,会发生什么?
相反,你应该使用JSON.stringify
。
var myName = 'John"abc';
'"' + myName + '"'; // "John"abc"
JSON.stringify(myName); // "John\"abc"
你可能也需要转义 U+2028 和 U+2029。
加号用于连接字符串,反斜杠用于告诉JS:“嘿,这不是结束的双引号标记,我想要实际的符号”。您还可以同时使用双引号和单引号。
var myName = 'John';
document.write('"' + myName + '"');
\
像是对编译器的提示。"
字符是字符串,而不是你的程序代码的一部分。+
作为字符串连接运算符。也就是说,编译器将尝试将两个字符串合并成一个。"he" + getString() + "llo"
将给出heXXXllo
,假设函数getString()返回值XXX
。JSON.stringify
来实现相同的效果。或者使用 "'" + myName + "'"
,不需要转义字符。
"John"
时,引号并不是字符串的一部分。它们只是一点语法,告诉编译器其中的内容是一个字符串字面量(与从用户或其他数据源读取不同)。但是,该值本身只是 John
,没有引号。当你打印它时,JavaScript 只会打印出 John
。你需要自己添加引号或任何其他修饰。document.write("\"" + myName + "\""); // 转义
document.write('" + myName + "'); // 未转义
加号字符用于连接字符串。在您的示例中,引号加变量加引号执行为“John”。var myName = "John";
这里myName的值为John,不带引号。引号是JS识别任何字符串的方式。在JS中,引号内的任何文本都被识别为字符串。
现在,当您想要显示引号时,您需要将引号作为字符串的一部分。
因此,"\"""基本上是将(")覆盖在引号周围。在JS中,(+)加号用于连接两个字符串。
希望这解答了您的问题!
'"' + myName + '"'
。在双引号外使用单引号,这样就不必转义中间的双引号了。 - madordocument.write
,那么现在就停止吧。毫无疑问,这将会非常过时:在2017年,document.write
的用途几乎为零。 - lonesomedaydocument.write
比console.log
多三个字符,所以实际上你会浪费更多的精力。而且它也不如console.log
好用——它只适用于数字和字符串。 - lonesomeday