字符串

优质
小牛编辑
134浏览
2023-12-01

在 JavaScript 中,文本数据被以字符串形式存储,单个字符没有单独的类型。

字符串的内部格式始终是 UTF-16,它不依赖于页面编码。

引号(Quotes)

让我们回忆一下引号的种类。

字符串可以包含在单引号、双引号或反引号中:

let single = 'single-quoted';
let double = "double-quoted";

let backticks = `backticks`;

单引号和双引号基本相同。但是,反引号允许我们通过 ${…} 将任何表达式嵌入到字符串中:

function sum(a, b) {
  return a + b;
}

alert(`1 + 2 = ${sum(1, 2)}.`); // 1 + 2 = 3.

使用反引号的另一个优点是它们允许字符串跨行:

let guestList = `Guests:
 * John
 * Pete
 * Mary
`;

alert(guestList); // 客人清单,多行

看起来很自然,不是吗?但是单引号和双引号可不能这样做。

如果我们使用单引号或双引号来实现字符串跨行的话,则会出现错误:

let guestList = "Guests: // Error: Unexpected token ILLEGAL
  * John";

当不考虑多行字符串的需要时,单引号和双引号来自语言创建的古时代。反引号出现较晚,因此更通用。

反引号还允许我们在第一个反引号之前指定一个“模版函数”。语法是:func`string`。函数 func 被自动调用,接收字符串和嵌入式表达式,并处理它们。你可以在 docs 中阅读更多关于它们的信息。这叫做 “tagged templates”。此功能可以更轻松地将字符串包装到自定义模版或其他函数中,但这很少使用。

特殊字符

我们仍然可以通过使用“换行符(newline character)”,以支持使用单引号和双引号来创建跨行字符串。换行符写作 \n,用来表示换行:

let guestList = "Guests:\n * John\n * Pete\n * Mary";

alert(guestList); // 一个多行的客人列表

例如,这两行描述的是一样的,只是书写方式不同:

let str1 = "Hello\nWorld"; // 使用“换行符”创建的两行字符串

// 使用反引号和普通的换行创建的两行字符串
let str2 = `Hello
World`;

alert(str1 == str2); // true

还有其他不常见的“特殊”字符。

这是完整列表:

字符描述
\n换行
\r回车:不单独使用。Windows 文本文件使用两个字符 \r\n 的组合来表示换行。
\', \"引号
\\反斜线
\t制表符
\b, \f, \v退格,换页,垂直标签 —— 为了兼容性,现在已经不使用了。
\xXX具有给定十六进制 Unicode XX 的 Unicode 字符,例如:'\x7A''z' 相同。
\uXXXX以 UTF-16 编码的十六进制代码 XXXX 的 unicode 字符,例如 \u00A9 —— 是版权符号 © 的 unicode。它必须正好是 4 个十六进制数字。
\u{X…XXXXXX}(1 到 6 个十六进制字符)具有给定 UTF-32 编码的 unicode 符号。一些罕见的字符用两个 unicode 符号编码,占用 4 个字节。这样我们就可以插入长代码了。

unicode 示例:

alert( "\u00A9" ); // ©
alert( "\u{20331}" ); // 佫,罕见的中国象形文字(长 unicode)
alert( "\u{1F60D}" ); //