11-转义
转义
当尝试在一段由文本写成的程序中表示文本数据时,如何区分文本数据和程序本身将会是一个问题。可以给字符串加上引号,但如果字符串本身也包含引号时会怎么样呢?要解决这个问题,需要对特殊字符进行转义,转义之后它们就不会被作为字符串终止符("或')处理了 。来看一个例子(不需要转义)
const dialog = 'Sam looked up, and said "hello, old friend!", as Max
walked in.';
const imperative = "Don't do that!";
在常量 dialog
中,因为采用了单引号的赋值方式,所以可以在内部放心地使用双引号。同样,在 imperative
中,双引号的赋值方式允许在其内部使用单引号。但如果在内部嵌套使用双引号会怎么样呢?比如下面的例子:
// 这行代码会产生错误
const dialog = "Sam looked up and said "don't do that!" to Max.";
不管使用单引号还是双引号,字符串常量dialog都会报错。不过还好,可以使用反斜杠(\)对引号进行转义。反斜杠作为一个信号告诉JavaScript该字符串并没有结束。下面使用两种类型的引号来重写之前的列子:
const dialog1 = "He looked up and said \"don't do that!\" to Max.";
const dialog2 = 'He looked up and said "don\'t do that!" to Max.';
当在字符串中使用反斜线时,就会遇到“先有鸡还是先有蛋”的问题。要解决这个问题,可以在反斜线前面再加一个反斜线:
const s = "In JavaScript, use \\ as an escape character in strings.";
至于采用单引号还是双引号完全取决于个人的喜好。针对一些提供给用户阅读的文字信息,因为缩写(像don’t)出现的频率较多,作者会倾向于使用双引号。而当我在JavaScritp字符串中插入HTML脚本时,则更喜欢使用单引号,这样就可以使用双引号表示HTML标签相关属性的值。