ES6学习-7 字符串的扩展
1、字符串的Unicode表示
ES6 加强了对 Unicode 的支持,允许采用\uxxxx
形式表示一个字符,其中xxxx
表示字符的 Unicode 码点。
如 a 可以用 "\u0061"表示。这种表示法只限于码点在\u0000
~\uFFFF
之间的字符(大约可以表示65000多个字符)。
如果超了怎么办?按我们正常的理解,一位表示不开用两位表示不就完了,事实上也是如此,比如下面这个生屁字:"𠮷" 就可以用
"\uD842\uDFB7"表示。但这样挺浪费空间的,这个字超过了FFFF,码点为:
20BB7,相当于多进了一位而已。但如果写成\u20BB7,ES6是不认的,但ES6提供了方法,可以识别这种编码,即把编码放到{}中,如前面的\u20BB7 就可以写成\u{20BB7}。下面是几个例子的代码:
let a="\u0061"; console.log(a); //输出 a let a="\uD842\uDFB7"; console.log(a); //输出 𠮷 let a="\u{20BB7}"; console.log(a); //输出 𠮷
2、字符串的遍历接口
ES6的字符串可以使用遍历器接口,用for of进行字符串的遍历。
let youname="郭大𠮷"; for (let tmpChar of youname) { console.log(tmpChar) } //郭 //大 //𠮷
用这种方式遍历字符串时,可以不用考虑超出\uFFFF码点的字符串,循环都会得到正确的结果。
3、模版字符串
模板字符串(template string)是增强版的字符串,用反引号(`)标识。它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。个人感觉模版字符串是ES6的闪光点之一,使许多复杂的字符拼接工作变得简单美观。
let str=`这是一个模版字符串
我会换行
我会缩进,我就是这么任性`;
console.log(str)
上面的代码会按格式原封不动的输出定义的模板字符串,包插换行,空格等效果。
let name="郭郭"; let age=18; let str=`you name is ${name},you age is ${age}`; console.log(str); // 输出 you name is 郭郭,you age is 18
上面的代码,会自动用变量的值替掉${变量},生成最后需要的字符串。
4、字符串的新增方法
ES6 对字符串新增了许多方法,挑重点的简单列一下吧。
String.fromCodePoint() 从 Unicode 码点返回对应字符,主要是解决超过FFFF码点的问题。对应老的函数为String.fromCharCode(),ES6中尽量使用新的函数。
String.raw() 该方法返回一个斜杠都被转义(即斜杠前面再加一个斜杠)的字符串。
includes() 该方法返回一个字符串是否包含指定的字符串,包含返回true,不包含返回false。
startsWith() 该方法返回一个字符串是否以指定的字符串开头。
endsWith() 该方法返回一个字符串是否以指定的字符串结尾。
repeat(n) 方法返回一个新字符串,表示将原字符串重复n次。
padStart(),padEnd() 字符串补全长度。如果某个字符串不够指定长度,会在头部或尾部补全。padStart()用于头部补全,padEnd()用于尾部补全。
trimStart(),trimEnd() 行为与trim()一致,trimStart()消除字符串头部的空格,trimEnd()消除尾部的空格。
matchAll() 方法返回一个正则表达式在当前字符串的所有匹配