字符串的扩展

1. 字符串的遍历接口

for (let codePoint of 'foo') {
  console.log(codePoint)
}
// "f"
// "o"
// "o"

除了遍历字符串,这个遍历器最大的优点是可以识别大于0xFFFF的码点,传统的for循环无法识别这样的码点。

let text = String.fromCodePoint(0x20BB7);

for (let i = 0; i < text.length; i++) {
  console.log(text[i]);
}
// " "
// " "

for (let i of text) {
  console.log(i);
}
// "𠮷"

2. 直接输入 U+2028 和 U+2029

JavaScript 字符串允许直接输入字符,以及输入字符的转义形式(Unicode编码)

JavaScript 规定有3个字符,不能在字符串里面直接使用,只能使用转义形式。

  • U+005C:反斜杠(reverse solidus)

  • U+000D:回车(carriage return)

  • U+000A:换行符(line feed)

3. 模板字符串 *

传统的 JavaScript 语言,输出模板通常是这样写的(下面使用了 jQuery 的方法)。

上面这种写法相当繁琐不方便,ES6 引入了模板字符串解决这个问题。

如果在模板字符串中需要使用反引号,则前面要用反斜杠转义。

如果使用模板字符串表示多行字符串,所有的空格和缩进都会被保留在输出之中。

模板字符串中嵌入变量,需要将变量名写在${}之中。

大括号内部可以放入任意的 JavaScript 表达式,可以进行运算,以及引用对象属性。

模板字符串之中还能调用函数。

模板字符串甚至还能嵌套。

4. 标签模板

它可以紧跟在一个函数名后面,该函数将被调用来处理这个模板字符串。这被称为“标签模板”功能(tagged template)。

标签模板其实不是模板,而是函数调用的一种特殊形式。“标签”指的就是函数,紧跟在后面的模板字符串就是它的参数。

但是,如果模板字符里面有变量,就不是简单的调用了,而是会将模板字符串先处理成多个参数,再调用函数。

“标签模板”的一个重要应用,就是过滤 HTML 字符串,防止用户输入恶意内容。

上面代码中,sender变量往往是用户提供的,经过SaferHTML函数处理,里面的特殊字符都会被转义。

标签模板的另一个应用,就是多语言转换(国际化处理)。

最后更新于

这有帮助吗?