String类型
String数据类型表示零或多个16位的Unicode字符序列。字符串可以使用双引号、单引号或者反引号
<script> let firstName = "John"; let lastName = "Jacob"; let lastName = `Jingleheimerschmidt`; </script>
跟某些语言中使用不同的引号会改变字符串的解释方式不同,ECMAScript语法中表示字符串的引号没有区别。 不过要注意的是,以某种引号作为字符串开头,必须仍然以该种引号作为字符串结尾
<script> let firstName = 'Nicholas“; // 语法错误:开头的结尾的引号必须是同一种 </script> 复制代码
字符字面量
字符串数据类型包括一些字符字面量,用于表示非打印字符或有其它用途的字符,如下表所示
字面量 | 含义 |
\n | 换行 |
\t | 制表 |
\b | 退格 |
\r | 回车 |
\f | 换页 |
\ | 反斜杠 |
' | 在字符串以单引号标示时使用 |
" | 在字符串以双引号标示时使用 |
` | 在字符串以反引号标示时使用 |
\xnn | 以十六进制编码nn表示的字符(其中n是十六进制数字0-F) |
\unnn | 以十六进制编码nnnn表示的字符(其中n是十六进制数字0-F) |
这些字符字面量可以出现在字符串中的任意位置,且可以作为单个字符被解释
let text = "This is the letter sigma: \u03a3";
在这个例子中,即使包含6个字符长的转义序列,变量text仍然是28个字符长。因为转义序列表示一个字符
字符串的长度可以通过length获取
console.log(text.length); // 28
这个属性返回字符串中的16位字符的个数
注意注意
如果字符串中包含双字节字符,那么length属性返回的值可能不是准确的字符数
字符串的特点
ECMAScript中的字符串是不可变的,意思是一旦创建,它们的值就不能变了。要修改某个变量中的字符串值,必须先销毁原始的字符串,然后将包含新值的另一个字符保存到该变量
let lang ="Java"; lang = lang + "JavaScript";
这里我们可以看到,变量lang一开始包含字符串Java。紧接着,lang被重新定义为包含Java和Script的组合,也就是JavaScript。整个过程中首先会分配一个足够容纳10个字符的空间,然后都填充上Java和Script。最后销毁的原始字符串Java和字符串Script。因为这两个字符串都没用了。所有处理都是在后台发生的,而这也是一些早期的浏览器在拼接字符串时候非常慢的原因,这些浏览器在后来的版本中都有针对性的解决了这些问题
转换为字符串
有两种方式把一个值转换为字符串。首先是使用几乎所有值都有的toString()方法。这个方法唯一的用途就是返回当前值的字符串等价物
<script> let age = 11 ; let ageAsString = age.toString(); // 字符串“11” let found = true ; let foundAsString = found.toString(); // 字符串“true” </script>
toString() 方法可见于数值、布尔值、对象和字符串值。null和undefined值没有toString() 方法
多数情况下,toString() 不接收任何参数。不过,在对数值调用这个方法时,toString() 可以接收一个底数参数,即以什么底数来输出数值的字符串表示。默认情况下,toString() 返回数值的十进制字符串表示。而通过传入参数,可以得到数值的二进制、八进制、十六进制或者其它任何有效的技术的字符串表示
<script> let num = 10 ; console.log(num.toString()); // 10 console.log(num.toString(2)); // 1010 console.log(num.toString(8)); // 12 console.log(num.toString(10)); // 10 console.log(num.toString(16)); // a </script>
这个例子在展示传入底数参数的时候,toString() 输出的字符串值也会随之改变,数值10可以输出位任意数值的格式。注意,默认情况下(不穿参数)的输出与传入参数10得到的结果相同
如果你不确定一个值是不是null或者undefined,可以使用String() 转型函数,它始终会反悔表示相应类型值的字符串。String() 函数遵循如下规则
- 如果值有toString() 方法,则调用该方法(不穿参数)并且返回结果
- 如果值是null,则返回null
- 如果值是undefined,则返回undefined
<script> let value1 = 10 ; let value2 = true ; let value3 = null ; let value4 ; console.log(String(value1)); // 10 console.log(String(value2)); // true console.log(String(value3)); // null console.log(String(value4)); // undefined </script>
这里展示了将4个值转换为字符串的情况:一个数值、一个布尔值、一个null和一个undefined。数值和布尔值的转换结果与调用toString()