ES6篇(3)字符串的扩展


(1)字符串的Unicode表示法
\uxxxx的形式表示一个字符,其中xxxx表示字符的Unicode码点
这种表示法限于表示\u0000~\uFFFF之间的字符,超过这个范围需要用双字节的形式表示
"\uD842\uDFB7"
ES6可以将两个字节的码点放入一个大括号内,"\u{20BB7}"
目前JavaScript有6中方法表示一个字符:
'\z' === 'z'  // true
'\172' === 'z' // true
'\x7A' === 'z' // true
'\u007A' === 'z' // true
'\u{7A}' === 'z' // true

(2)字符串的遍历器接口
ES6 为字符串添加了遍历器接口,使得字符串可以被for...of循环遍历。
除了遍历字符串,这个遍历器最大的优点是可以识别大于0xFFFF的码点,传统的for循环无法识别这样的码点。

(3)直接输入U+2028和U+2029
JavaScript 字符串允许直接输入字符,以及输入字符的转义形式。二者是等价的。
JavaScript规定以下5个字符,不能在字符串里直接使用,只能使用转义形式:
U+005C:反斜杠(reverse solidus)
U+000D:回车(carriage return)
U+2028:行分隔符(line separator)
U+2029:段分隔符(paragraph separator)
U+000A:换行符(line feed)
但是在json格式允许的字符串内直接使用U+2028(行分隔符)和 U+2029(段分隔符),
解析时可能会报错,ES6允许 JavaScript 字符串直接输入 U+2028(行分隔符)和 U+2029(段分隔符)。

(4)Json.stringify()的改造
为了确保返回的是合法的 UTF-8 字符,ES2019 改变了JSON.stringify()的行为。
如果遇到0xD800到0xDFFF之间的单个码点,或者不存在的配对形式,
它会返回转义字符串,留给应用自己决定下一步的处理。
JSON.stringify('\u{D834}') // ""\\uD834""
JSON.stringify('\uDF06\uD834') // ""\\udf06\\ud834""

(5)模板字符串
传统的JavaScript输出模板繁琐不方便,ES6引入模板字符串解决这个问题。
模板字符串是增强版的字符串,用反引号(`)标识,它可以作为普通字符串,也可以用来定义
多行字符串或者字符串嵌入变量。
说明:如果在模板字符串中需要用反引号,则需要使用反斜杠转义。如果使用模板字符串
表示多行字符串,所有的空格和缩进都会被保留在输出中,可使用trim方法消除。
模板字符串中嵌入变量,需要将变量名写在${}之中。大括号内可以放入任意的JavaScript表达式,
可以进行运算或引用对象属性。
模板字符串中可以调用函数,可以嵌套(如果是对象,将默认调用对象的toString方法,如果是字符串,则会原样输出)
(6)实例:模板编译
(7)标签模板

模板字符串的功能,不仅仅是上面这些。它可以紧跟在一个函数名后面,该函数将被调用来处理这个模板字符串。这被称为“标签模板”功能(tagged template)。
(8)模板字符串的限制
前面提到标签模板里面,可以内嵌其他语言。但是,模板字符串默认会将字符串转义,导致无法嵌入其他语言。

阮一峰 ES6字符串扩展

猜你喜欢

转载自blog.csdn.net/u012149906/article/details/91420688