字符串的扩展 
字符的 Unicode 表示法 
- 支持Unicode码表示一个字符:
\u0000~\uFFFF- 超出范围必须使用上述两个Unicode码表示
 - 否则会理解成unicode字符码,加上后面的字符串的形式
 - 对码点加上大括号,可解读所有字符:
\u{xxxx} 
 - JavaScript表示字符的六种方法,如下: 
- '\z'
 - '\172':八进制
 - '\x7A':十六进制
 - '\u007A'
 - '\u{7A}'
 
 
字符串的遍历器接口 
- 为字符串添加了遍历器接口,可以使用for……of遍历
 - for……of可遍历大于0xFFFF的码点,for……in不可遍历此类码点
 
扩展:
- for……of和for……in的异同? 
- for……of遍历可迭代对象:array、string、map、set、arguments(包括doms)、生成器、typedarray(
[0x00, 0xff])、其他可迭代对象,并返回每项的value - for……of可使用break、throw continue、return中止迭代
 - for……in遍历一个对象的可枚举属性
 
 - for……of遍历可迭代对象:array、string、map、set、arguments(包括doms)、生成器、typedarray(
 
直接输入 U+2028 和 U+2029 
- JavaScript允许直接输入字符,以及他的Unicode码格式,两者是等价的
 - 但反斜杠、回车、换行符、行(段)分隔符只能使用转义形式
 - es2019允许字符串中输入行(段)分隔符,但正则表达式中不允许输入
 
JSON.stringify() 的改造 
- json标准数据必须是utf-8编码
 - 在
0xD800~0xDFFF之间的字符需要配对使用,且必须是配对已有的字符 - es2019之前,他会返回单个码点
\u{D834}=>"\u{D834}" - ES2019中,遇到该范围码点,且配对不合法,会直接返回转义字符
\u{D834}=>"\\uD834" 
模板字符串 
- 使用反引号表示,可定义多行字符串、或在字符串中嵌入变量
 - 定义多行字符串时,空格、缩进会原样保留
 - 嵌入变量,应在反引号内部使用
${var}的形式- var可以是变量,也可以是表达式(会自动执行,然后返回结果)
 - var的值非普通字符串,会按照一般规则返回字符串形式
 - var同样可以是一个模板字符串,可形成套娃形式(层层嵌套)
 
 
实例:模板编译 
作用:将一个字符串模板编译成一个html模板(🔴没细看,感觉有点难)
javascript
// origin
let template = `
<ul>
  <% for(let i=0; i < data.supplies.length; i++) { %>
    <li><%= data.supplies[i] %></li>
  <% } %>
</ul>
`;
// template html
<ul>
  <li>broom</li>
  <li>mop</li>
  <li>cleaner</li>
</ul>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
标签模板(🟡) 
公式如下:
javascript
func`Hello ${a} world ${b}`
=>=>=>=>=>=>=>=>=>=>=>=>=>
func(['hello ', ' world ', ''], `${a}`,`${b}`)1
2
3
2
3
- 标签模板是函数调用的另一种方式,其中标签指的是函数,模板是函数的参数
 - 函数与模板直接不能有空格
 - 模板将常量字符串进行了分割,成为了函数参数第一个变量,后续变量依次为从左到右的变量字符串
 - 作用: 
- 通过参数传递到函数内部,将html模板进行过滤,防止恶意输入
 - 进行多语言转换,在JavaScript语言中嵌入其他语言