字符串的扩展

2021-02-23 14:31:44 浏览数 (1)

字符串的扩展

字符的 Unicode 表示法

JavaScript 允许采用uxxxx形式表示一个字符,其中xxxx表示字符的 Unicode 码点

ES6 对这一点做出了改进,只要将码点放入大括号,就能正确解读该字符

codePointAt()

JavaScript 内部,字符以 UTF-16 的格式储存,每个字符固定为2个字节

对于这种4个字节的字符,charAt方法无法读取整个字符,charCodeAt方法只能分别返回前两个字节和后两个字节的值

ES6 提供了codePointAt方法,能够正确处理 4 个字节储存的字符,返回一个字符的码点。

对于那些两个字节储存的常规字符,它的返回结果与charCodeAt方法相同

codePointAt方法返回的是码点的十进制值,如果想要十六进制的值,可以使用toString方法转换一下

String.fromCodePoint()

ES5 提供String.fromCharCode方法,用于从码点返回对应字符,但是这个方法不能识别 32 位的 UTF-16 字符

ES6 提供了String.fromCodePoint方法,可以识别大于0xFFFF的字符,弥补了String.fromCharCode方法的不足

如果String.fromCodePoint方法有多个参数,则它们会被合并成一个字符串返回

字符串的遍历器接口

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

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

at()

ES5 对字符串对象提供charAt方法,返回字符串给定位置的字符。该方法不能识别码点大于0xFFFF的字符

有一个提案,提出字符串实例的at方法,可以识别 Unicode 编号大于0xFFFF的字符,返回正确的字符

有一个提案

normalize()

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

includes(), startsWith(), endsWith()

JavaScript 只有indexOf方法,可以用来确定一个字符串是否包含在另一个字符串中

includes():返回布尔值,表示是否找到了参数字符串

startsWith():返回布尔值,表示参数字符串是否在原字符串的头部

endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部

repeat()

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

参数如果是小数,会被取整

如果repeat的参数是负数或者Infinity,会报错

如果参数是 0 到-1 之间的小数

padStart(),padEnd()

如果某个字符串不够指定长度,会在头部或尾部补全。padStart()用于头部补全,padEnd()用于尾部补全

padStart和padEnd一共接受两个参数,第一个参数用来指定字符串的最小长度,第二个参数是用来补全的字符串

如果原字符串的长度,等于或大于指定的最小长度,则返回原字符串

如果用来补全的字符串与原字符串,两者的长度之和超过了指定的最小长度,则会截去超出位数的补全字符串

如果省略第二个参数,默认使用空格补全长度

matchAll()

matchAll方法返回一个正则表达式在当前字符串的所有匹配

模板字符串

模板字符串(template string)是增强版的字符串,用反引号(`)标识

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

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

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

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

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

实例:模板编译

该模板使用<%...%>放置 JavaScript 代码,使用<%= ... %>输出 JavaScript 表达式

标签模板

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

String.raw()

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

模板字符串的限制

模板字符串默认会将字符串转义,导致无法嵌入其他语言

0 人点赞