2017-01-28 61 views
-3

我想明白代码背后的逻辑:加双引号在Javascript

var myName = "John"; 

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

我得到了我想要的东西,即broswer显示为“约翰”与周围的双引号,但我不uderstand为什么我必须在字符串之前和之后使用+以及为什么要转义序列。必须以这种方式使用。

+0

+将字符串和转义序列连接起来以转义双引号,以便使用字符串打印。 –

+0

你也可以用''''+ myName +''''。在双引号周围使用单引号,所以你不必跳过中间的双引号 – mador

+1

如果你正在学习一个教程,它使用'document.write',现在就停下来。毫无疑问,它会过时:'document.write'的用法在2017年几乎为零。 – lonesomeday

回答

1

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

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

Js Fiddle

+0

这真的很棘手。 '''等同于“\”“,然后我需要将它与字符串连接起来+ –

+0

是的。也可以用另一种方式工作,如果你想打印一个单引号,你可以用“'”来包围它。尽管在代码中只使用一种引号(这看起来更干净)是一种更好的做法,但您可以同时使用这两种引号。 –

0

请参阅一些基本的书或W3Schools的用于JS的基础知识。

var myName = "John"; 

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

现在,当你想也显示报价,你需要引号字符串

的一部分,因此,“\”,“基本上覆盖(”)引号包围。在JS(+)加号是用来连接两个字符串。

希望能够澄清你的问题!

0

转义字符\的作用类似于编译器的提示。

通过指定转义,编译器知道以下"字符是一个字符串,它不是您的编程代码的一部分。

E.g.编译器将看到字符串“helloWor \” LD”是的‘HelloWorld’。

+运营商作为一个字符串连接运算符,也就是说,编译器将尝试加入2串为一体。 如"he" + getString() + "llo"会给你heXXXllo,假设函数getString()返回值XXX

0

在JavaScript字符串中包含单引号或双引号的字符如果你想在字符串中使用实际的单/双引号,你必须“转义“,这是通过反斜杠字符来完成的,绕过它的方法是在字符串中使用不同的换行符,参见下面的

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

document.write('" + myName + "'); // not escaped

加号字符被用来连接字符串。在你的例子中,报价加变量加上报价执行到“约翰”

1

你的代码容易被字符串注入!如果myName包含报价怎么办?

相反,你应该使用JSON.stringify

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

您可能想逃跑U + 2028和U + 2029了。

0

你可以用JSON.stringify达到同样的效果。或者也许"'" + myName + "'",没有逃生。


的原因,你需要你做了什么,是因为你指定"John"时使用引号实际上不是字符串的一部分。它们有点语法告诉编译器,它们内部的任何内容都是您指定为字面值的字符串值(而不是从用户或其他数据源读取)。但是,价值本身只是John,没有引号。当您打印它时,JavaScript将仅打印它为John。您需要自行添加引号或任何额外的装饰。