我想了解该代码背后的逻辑:
var myName = "John";
document.write("\""+ myName +"\"");
我得到了我想要的东西,即broswer用双引号显示“John”,但我不明白为什么我必须在字符串之前和之后使用+以及为什么要逃避seq。必须以这种方式使用。
答案 0 :(得分:6)
您的代码很容易受到字符串注入!如果myName
包含引号怎么办?
相反,您应该使用JSON.stringify
var myName = 'John"abc';
'"' + myName + '"'; // "John"abc"
JSON.stringify(myName); // "John\"abc"
您可能也希望逃避U + 2028和U + 2029.
答案 1 :(得分:2)
加号用于连接字符串,反斜杠用于告诉JS"嘿,这不是结束的doble引号,我想要实际的符号"。您也可以使用对您有利的doble和单引号。
var myName = 'John';
document.write('"' + myName + '"');
答案 2 :(得分:2)
您可以使用JSON.stringify
实现相同目标。或许"'" + myName + "'"
,没有逃脱。
您需要执行操作的原因是因为您在指定"John"
时使用的引号实际上不是字符串的一部分。它们有一点语法告诉编译器,它们内部的任何内容都是您指定为字面值的字符串值(而不是从用户或其他数据源读取)。但是,值本身只是John
,没有引号。当您打印它时,JavaScript只会将其打印为John
。您需要自己添加引号或任何额外的装饰。
答案 3 :(得分:0)
请参阅一些基本书或w3schools了解JS的基础知识。
var myName = "John";
这里myName的值为John而没有引号。引号是JS识别任何字符串的方式。引号内的任何文本在JS中都被识别为String。
现在,当您还要显示引号时,您需要将引号作为字符串的一部分
所以“\”“基本上是围绕引号覆盖(”)。在JS(+)中,加号用于连接两个字符串。
希望这能澄清你的问题!!
答案 4 :(得分:0)
转义字符\
就像是对编译器的提示。
通过指定转义,编译器知道以下"
字符是一个字符串,并且它不应该是您的编程代码的一部分。
E.g。编译器将看到字符串" helloWor \" ld" as" helloWorld"。
+
运算符充当字符串连接运算符。也就是说,编译器将尝试将2个字符串连接成一个。
例如。 "he" + getString() + "llo"
会给你heXXXllo
,假设函数getString()返回值XXX
答案 5 :(得分:0)
在javascript字符串中,字符包含单引号或双引号。如果你在字符串中想要使用实际的单/双引号,你必须“逃避”它。这是通过反斜杠字符完成的。解决它的方法是使用你在字符串中使用的不同的包装引号。见下文
document.write("\"" + myName + "\""); // escaped
document.write('" + myName + "'); // not escaped
加号字符用于连接字符串。在您的示例中,quote加上变量加引号,执行到“John”