1.3 字符串
下一个基本数据类型是字符串。字符串用于表示文本。它们是通过将其内容括在引号中来编写的。
只要字符串的开头和结尾处的引号匹配,你就可以使用单引号、双引号或反引号来标记字符串。
几乎任何东西都可以放在引号之间,JavaScript会从中产生一个字符串值。但是一些字符更难处理。你可以想象在引号之间加入引号会很难。只有当字符串用反引号(`)引用时,才能包含换行符(当你按下ENTER时得到的字符)而不转义。
为了能够在字符串中包含这些字符,使用以下表示法:每当在引用文本中找到反斜杠(\)时,它表示后面的字符具有特殊含义。这称为转义字符。以反斜杠开头的引号不会结束某个字符串,而是作为字符串的一部分。在反斜杠后出现字符n时,它将被解释为换行符。类似地,反斜杠后面的t表示制表符。使用以下字符串:
包含的实际文本是:
当然,在某种情况下,你希望字符串中的反斜杠只是反斜杠,而不是特殊代码。如果两个反斜杠紧挨着,它们将一起折叠,并且在结果字符串值中只有一个反斜杠。因此,字符串"A newline character is written like "\n"."可以表达成如下形式:
字符串也必须被表示为一系列位,以便能够存在于计算机内部。JavaScript执行此操作的方式基于Unicode标准。该标准几乎为你需要的每个字符都分配一个数字,包括希腊语、阿拉伯语、日语、阿尔曼语等语言中的字符。如果我们为每个字符都分配一个数字,则可以用一系列数字来描述字符串。
这就是JavaScript处理字符串的方式。但是有一个复杂因素:JavaScript的表示法中每个字符串元素使用16位,最多可以描述216个不同的字符。但是Unicode定义的字符数量多于此数量——大约是此数量的两倍。因此,一些字符,如许多表情符号,最多采取JavaScript字符串中的两个“字符位置”。我们将在5.9节中详细讨论此问题。
不能对字符串执行减法、乘法或除法,但可以在它们上使用+运算符。它不表示相加,而表示拼接——它将两个字符串黏合在一起。以下行将生成字符串“concatenate”:
字符串值具有许多可对其执行其他操作的关联函数(方法)。我将在4.4节中详细介绍这些内容。
用单引号或双引号写的字符串表现非常相似——唯一的区别在于你需要在其中转义哪种类型的引号。反引号引用的字符串,通常称为模板文字(template literals),可以做更多的技巧。除了能够跨行,它们还可以嵌入其他值。
当你在模板文字中的${}内写一些东西时,它的结果将被计算出来,转换为字符串,并放在此位置。此示例得到half of 100 is 50。