3.4.6 String 类型
String (字符串)数据类型表示零或多个 16 位 Unicode 字符序列。字符串可以使用双引号(")、
单引号(')或反引号(`)标示。
-
1、字符字面量
-
字符串数据类型包含一些字符字面量,用于表示非打印字符或有其他用途的字符:
字面量 含义 \n 换行 \t 制表 \b 退格 \r 回车 \f 换页 \\ 反斜杠( \ ) \' 单引号( ' ),在字符串以单引号标示时使用,例如 'He said, \'hey.\'' \" 双引号( " ),在字符串以双引号标示时使用,例如 "He said, \"hey.\"" \` 反引号( ` ),在字符串以反引号标示时使用,例如 `He said, \`hey.\`` \xnn 以十六进制编码 nn 表示的字符(其中 n 是十六进制数字 0~F),例如 \x41 等 于 "A" \unnnn 以十六进制编码 nnnn 表示的 Unicode 字符(其中 n 是十六进制数字 0~F), 例如 \u03a3 等于希腊字符 "Σ"
-
这些字符字面量可以出现在字符串中的任意位置,且可以作为单个字符被解释
-
-
2、字符串的特点
- ECMAScript 中的字符串是不可变的(immutable),意思是一旦创建,它们的值就不能变了。要修改某个变量中的字符串值,必须先销毁原始的字符串,然后将包含新值的另一个字符串保存到该变量
-
3、转换为字符串
-
有两种方式把一个值转换为字符串:
-
首先是使用几乎所有值都有的 toString() 方法。这个方法唯一的用途就是返回当前值的字符串等价物。
-
toString() 方法可见于数值、布尔值、对象和字符串值。(没错,字符串值也有 toString() 方法,该方法只是简单地返回自身的一个副本。) null 和 undefined 值没有 toString() 方法。
-
多数情况下, toString() 不接收任何参数。不过,在对数值调用这个方法时, toString() 可以接收一个底数参数,即以什么底数来输出数值的字符串表示。默认情况下, toString() 返回数值的十进制字符串表示。而通过传入参数,可以得到数值的二进制、八进制、十六进制,或者其他任何有效基数的字符串表示
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"
-
-
用加号操作符给一个值加上一个空字符串 "" 也可以将其转换为字符串
-
-
-
4、模板字面量
- ECMAScript 6 新增了使用模板字面量定义字符串的能力。与使用单引号或双引号不同,模板字面量保留换行字符,可以跨行定义字符串
-
5、字符串插值
- 字符串插值通过在 ${} 中使用一个 JavaScript 表达式实现
- 所有插入的值都会使用 toString() 强制转型为字符串,而且任何 JavaScript 表达式都可以用于插值。嵌套的模板字符串无须转义
-
6、模板字面量标签函数
-
模板字面量也支持定义标签函数(tag function),而通过标签函数可以自定义插值行为。标签函数会接收被插值记号分隔后的模板和对每个表达式求值的结果。
let a = 6; let b = 9; function simpleTag(strings, aValExpression, bValExpression, sumExpression) { console.log(strings); console.log(aValExpression); console.log(bValExpression); console.log(sumExpression); return 'foobar'; } let untaggedResult = `${ a } + ${ b } = ${ a + b }`; let taggedResult = simpleTag`${ a } + ${ b } = ${ a + b }`; // ["", " + ", " = ", ""] // 6 // 9 // 15 console.log(untaggedResult); // "6 + 9 = 15" console.log(taggedResult); // "foobar"
-
因为表达式参数的数量是可变的,所以通常应该使用剩余操作符(rest operator)将它们收集到一个数组中:
let a = 6; let b = 9; function simpleTag(strings, ...expressions) { console.log(strings); for(const expression of expressions) { console.log(expression); } return 'foobar'; } let taggedResult = simpleTag`${ a } + ${ b } = ${ a + b }`; // ["", " + ", " = ", ""] // 6 // 9 // 15 console.log(taggedResult); // "foobar"
-
-
7、原始字符串
- 使用模板字面量也可以直接获取原始的模板字面量内容(如换行符或 Unicode 字符),而不是被转换后的字符表示。为此,可以使用默认的 String.raw 标签函数
网友评论