字符串的扩展与新增方法

288 阅读3分钟

1.字符串的扩展

1.1字符串的Unicode表示法

ES6允许采用\uxxxx的方式表示一个字符,每一个字符都有一个码点即xxxx,但是这种表示方法只能表示码点在\u0000-\uFFFF之间的字符。

image.png

\u20888超过了范围,默认认成\u2088+8,所以显示为如图所示。

ES6对此作出了一些改进,若码点超出范围,可以将其放入大括号内,就能正确解读。

image.png

1.2字符串的遍历接口

ES6新增了for...of遍历循环遍历字符串,其最大的有点在于可以遍历大于0xFFFF的码点。

1.3 模板字符串(templata string)

ES6模板字符串是增强版的字符串,用反引号(`)标识,可以在模板字符串中嵌入变量。变量使用${}包裹,其中大括号{}内可以放入任意的JS表达式,可以进行运算,也可以放入对象属性。

image.png

大括号内可以进行几乎所有的JS表达式,包括调用函数。相应的,不能引用未定义的变量,否则会报错。若括号内不是字符串,则会进行转译,将其转为字符串形式。模板字符串还能引用本身。

image.png

1.4标签模板

模板字符串可以紧跟在一个函数名后面,该函数就会被调用来处理这个模板字符串。

image.png

若模板字符串中包含有变量,则会先将模板字符串处理成多个参数,再调用改函数。

image.png

在这个过程中tag'Hello ${a + b} world ${a * b}'中,该模板字符串由于包含变量,于是字符串被处理成tag'{['Hello','world',''],3,2},再依次调用。

2.字符串的新增方法

2.1String.fromCodePoint()codePointAt()

String.fromCodePoint()用于从Unicode码点返回字符,且可以识别码点大于0xFFFF的字符。而codePointAt()则与其相反,返回该字符十进制码点,可以配合toString(16)搭配使用直接返回其16进制码点。

image.png

2.2String.raw()

该方法返回一个斜杠\都被转义的字符串。

image.png

且不论原字符串的斜杠是否被转义过,只要存在斜杠就都会被转义。

2.3normalize()

由于国家符号差异,如符号Ǒ(\u01D1)有两种表达方式,一种为前面所示直接表示,另一种则为组合表达,由O(\u004F)与'(\u030C)合成Ǒ(\u004F\u030C)。但是JS不能识别后者,于是ES6提供方法normalize()来将不同的表示方法统一。

image.png

其包含四个参数,分别为NFCNFDNFKCNFKDNFCNFKC属于字符合成选项,NFDNFKD属于字符拆分选项,相同类的不同区别在于NFC属于"等价合成",即合成前与合成后视觉和语义上等价。NFKC属于"兼容等价合成",即合成前与合成后语义存在等价,但视觉不等价。拆分参数区别亦然。

image.png

2.4实例方法:includes(),startsWith(),endsWith()

这三者均可判定一个字符串是否包含在另一个字符串中,均返回布尔值,区别在于,includes()判定是否找到了参数字符串,startsWith()判定参数字符串是否在原字符串头部,endsWith()判定是否在尾部。

image.png

这三个方法都可以接受第二个参数,表示开始搜索的位置,区别在于endsWith()的参数表示针对从此位置开始往前数所有字符。而其他两个则是从此位置往后数所有字符。

2.5实例方法:repeat()

该方法返回一个新字符串,为原字符串重复n次后的结果。

image.png

当n为整数以外的数时,会视情况处理。小数会取证,小于-1的负数infinity会报错,-1到0之间会取0,NaN也会取0,字符串会优先转换成数字再做运算。

2.6实例方法:padStart(),padEnd()

此方法用于字,若没有,则用空格补齐。padStart()表示在头部补齐,padEnd()表示在尾部补齐。若原字符串的长度等于或大于规定长度,则实例方法不生效,返回原字符串。

image.png

2.7实例方法trimStart()trimEnd()

此实例方法用于去除字符串头部与尾部的空格,相应的,各自只能去除头部或者去除尾部的空格。

image.png

2.8实例方法replaceAll()

replaceAll()为ES2021引入,解决了replcae()只能替换第一个匹配项的问题。该方法可以替换所有匹配项。

image.png

2.9实例方法at()

该方法接收一个整数作为参数,返回字符串中该参数位置的字符,若为负数,则默认顺序为从后往前数。若参数超出了字符串范围,则返回undifined

image.png