前言

本章次要是内容为是 ES6 对字符串的革新和加强。
本章记录字符串的扩大罕用重点局部,不罕用常识稍作记录。
本章原文链接: 字符串的扩大

模板字符串(template string)

ES6字符串的扩大最罕用的就是模版字符串了
模板字符串,都是用反引号示意。如果在模板字符串中须要应用反引号,则后面要用反斜杠本义。

  • 模版字符串 保留空格和换行。
  • 模版字符串 是容许嵌入变量名或表达式。
  • 模版字符串 能够嵌套模版字符串。
  • 模版字符串 "标签模板"性能

模版字符串保留空格和换行,间接在模版字符串中应用换行与空格就行

//  模版字符串保留空格和换行const SAMPLE = ` <ul>    <li>list1</li>    <li>list2</li>    <li>list3</li>    <li>list4</li>  </ul>`;console.log(SAMPLE);// 输入后果为/* <ul>    <li>list1</li>    <li>list2</li>    <li>list3</li>    <li>list4</li>  </ul>*/

模版字符串应用变量与字符串须要写在${} 的大括号中,在大括号中也能够写字符串。

// 在模版字符串中应用变量与表达式let sampleName = "gssg";let sampleAge = 10;let sampleAge1 = 8;const SAMPLE = `My name is ${sampleName} and MY age is ${sampleAge + sampleAge1} years old`;console.log(SAMPLE);// 输入 My name is gssg and MY age is 18 years old

在模版字符串中还能够写模版字符串,利用${}来嵌套。

// 模版字符串的嵌套const SAMPLE = `  <ul>  ${`<li>list1</li>    <li>list2</li>`}  </ul>`;console.log(SAMPLE);// 输入 /*    <li>list1</li>    <li>list2</li>  </ul>*/

模版字符串能够紧跟在一个函数名前面,该函数将被调用来解决这个模板字符串。这被称为“标签模板”性能(tagged template)。
标签模板其实不是模板,而是函数调用的一种非凡模式。“标签”指的就是函数,紧跟在前面的模板字符串就是它的参数。

alert`hello`;// 等同于alert(['hello']);// 模板字符串后面有一个标识名tag,它是一个函数。整个表达式的返回值,就是tag函数解决模板字符串后的返回值。let sample = 5;let sample1 = 10;tag`Hello ${sample} world ${sample + sample1}`;// 等同于tag(['Hello ', ' world ', ''], 5, 15);

Unicode

Unicode的指标是为世界上每一个字符提供惟一标识符,惟一标识符称为码位或码点(code point)。而这些码位是用于示意字符的,又称为字符编码(character encode)

ES6 增强了对 Unicode 的反对,容许采纳\uxxxx模式示意一个字符,其中xxxx示意字符的 Unicode 码点。

console.log("\u0062"); // b// 也能够应用大括号将原来超过 0xFFFF 的数值,正确解读console.log("\u{20FFF}"); // 

字符串的遍历器接口

ES6 为字符串增加了遍历器接口(这部分内容在前面),使得字符串能够被for...of循环遍历。

for (let item of 'sample') {  console.log(item);}// 一一输入/*lpmase*/

这个遍历器最大的长处是能够辨认大于0xFFFF的码点,传统的for循环无奈辨认这样的码点。

let sample = "\u{20FFF}";for (let item of sample) {  console.log(item);}// 输入 

JSON.stringify() 的革新

依据规范,JSON 数据必须是 UTF-8 编码。然而,当初的JSON.stringify()办法有可能返回不合乎 UTF-8 规范的字符串。

ES2019 扭转了JSON.stringify()的行为。如果遇到0xD8000xDFFF之间的单个码点,或者不存在的配对模式,它会返回本义字符串,留给利用本人决定下一步的解决。

let sample = JSON.stringify('\u{D834}');let sample1 = JSON.stringify('\uDF06\uD834');console.log(sample, sample1); // "\ud834" "\udf06\ud834"