第 4 章 字符串的扩展

ES6 加强了对 Unicode 的支持,并且扩展了字符串对象

1. 字符的 Unicode 表示法

  • JavaScript 允许采用 \uxxxx 形式表示一个字符,但这种表示仅限于在 \u0000 ~ \uFFFF 之间的字符
  • 对于四字节的 UTF-16 编码,ES6 只需要将编码放入大括号就能正确解读该字符,形如 \u{xxxx}

2. codePointAt()

  • ES6 提供的 codePointAt 方法能够正确处理四字节字符,返回该字符的十进制编码
  • codePointAt 方法的参数是字符在字符串中的位置(从0开始)

3. String.fromeCodePoint()

  • ES6 提供的 String.fromCodePoint 方法可以识别四字节的字符,在作用上正好与 codePointAt 方法相反
  • 如果 String.fromCodePoint 方法有多个参数,则它们会被合并成一个字符串返回
  • fromCodePoint 方法定义在 String 对象上,而 codePointAt 方法定义在字符串的实例对象上

4. 字符串的遍历器接口

  • ES6 为字符串添加了遍历器接口,使得字符串可以由 for…of 循环遍历

5. at()

  • 提案:字符串实例的 at 方法,可以识别四字节字符,返回字符串给定位置的字符

6. normalize()

  • ES6 为字符串实例提供的 normalize 方法用来将字符的不同表示方法统一为同样的形式,这称为 Unicode 正规化

7. includes()、startsWith()、endsWith()

  • 传统上,JavaScript 中只有 indexOf 方法可用来确定一个字符串是否包含在另一个字符串中
  • ES6 提供了 3 种新的方法:
    1. includes():返回布尔值,表示是否找到了参数字符串
    2. startsWith():返回布尔值,表示参数字符串是否在源字符串的头部
    3. endsWith():返回布尔值,表示参数字符串是否在源字符串的尾部
      这 3 中方法都支持第二个参数,表示开始搜索的位置。前两种方法针对从第 n 个位置到字符串结束位置之间的字符,第三种方法针对前 n 个字符

8. repeat()

  • repeat 方法返回一个新字符串,表示将原字符串重复 n 次

9. padStart()、padEnd()

  • ES2017 引入字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全。padStart()用于头部补全,padEnd()用于尾部补全。
  • 接受两个参数,第一个参数指定字符串的最小长度,第二个参数是用来补全的字符串
  • 如果原字符串长度等于或大于指定的最小长度,则返回原字符串
  • 如果用来补全的字符串与原字符串的长度之和超过了指定的最小长度,则会截去超过位数的补全字符串
  • 如果省略第二个参数,则会用空格来补全
  • padStart 常见用途为数值补全指定位数和提示字符格式

10. 模版字符串

  • 模版字符串是增强版的字符串,用反引号(`)标识,可以当做普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // 普通字符串
    `In JavaScript '\n' is a line-feed.`

    // 多行字符串
    `In JavaScript this is
    not legal.`

    console.log(`strinng text line 1
    string text line 2`);

    // 字符串中嵌入变量
    var name = "Bob", time = "today";
    `Hello ${name}, how are you ${time}?`
  • 在模版字符串中嵌入变量,需要将变量名写在 ${} 中,{} 内可以放入任意的 JavaScript 表达式,可以进行运算,以及引用对象属性,还能调用函数

11. 标签模版

  • 模版字符串可以紧跟在一个函数名后面,该函数将被调用来处理这个模版字符串,这被称为标签模版

    1
    2
    3
    alert`123`;
    // 等同于
    alert("123");
  • 标签模版其实不是模版,而是函数调用的一种特殊形式。标签指的是函数,紧跟在后面的模版字符串是它的参数

  • 如果模版字符串中有变量,就不再是简单的调用了,而是要将模版字符串先处理成多个参数,再调用函数
  • 标签模版的一个重要应用是过滤 HTML 字符串,防止用户输入恶意内容
  • 标签模版的另一个应用是多语言切换(国际化处理)

12. String.raw()

  • String.raw() 方法往往用来充当模版字符串的处理函数,返回一个反斜杠都被转义的字符串,对应于替换变量后的模版字符串

13. 模版字符串的限制

  • 标签模版可以内嵌其他语言,但是模版字符串默认会将字符串转义,导致无法嵌入其他语言
  • 提案:放松对标签模版里面的字符串转义的限制。如果遇到不合法的字符串转义,就返回 undefined,而不是报错,并且从 raw 属性上可以得到原始字符串
-------------本文结束 感谢您的阅读-------------
您的支持将鼓励我继续创作!