字符串的Unicode表示法
ES6加强了对Unicode的支持,并且扩展了字符串对象
Javascript允许采用\uxxxx形式表示一个字符,其中xxxx表示字符的Unicode码点。
''\u0061"
//a
但是,这种表示法只限于码点在\u0000~\uFFFF之间的字符。超出这个范围的字符,必须用2个双字节的形式表示。
console.log('\uD842\uDFB7') //𠮷
console.log('\u20BB7') //₻7
上面的代码表示,如果直接在\u后面跟上超过0xFFFF的数值(比如20BB7),JavaScript会理解成\u20BB + 7。ES6对这一点进行了改进,只要将码点放入大括号,就能正确解读该字符。
console.log('\u{20BB7}') //𠮷
有了这种表示法之后,js共有6种方法可以表示一个字符。
console.log('\z' === 'z') //true
console.log('\172' === 'z') //true
console.log('\x7A' === 'z') //true
console.log('\u007A' === 'z') //true
console.log('\u{7A}' === 'z') //true
什么?只有五种?再仔细看看?(滑稽)
codePointAt()
codePointAt()方法是测试一个字符是由2个字节组成还是由4个字节组成的最简单方法。
function is32Bit(c){
return c.codePointAt(0) > 0xFFFF;
}
console.log(is32Bit('𠮷')) //true
console.log(is32Bit('张')) //false
String.fromCodePoint()
es5提供了fromCodePoint()方法用于从码点返回对应字符,但是这个方法不能识别32位的UTF-16字符(Unicode编码大于0xFFFF)
es6提供了String.fromCodePoint()方法,可以识别32位的UTF-16字符,弥补fromCodePoint()方法的不足,在作用上刚好与codePointAt()相反。
normalize()
normalize()方法会按照指定的一种 Unicode 正规形式将当前字符串正规化。(如果该值不是字符串,则首先将其转换为一个字符串)。
es6新增的查找字符串方法
传统JS中只有一个indexOf()方法可以用来确定一个字符串是否包含在另一个字符串中,es6新增了includes()、startsWith()、endsWith()3种新方法:
includes()
值得注意的是,不光
String提供了include()方法,Array、typedArray也有同名方法,并且其作用也都是用于判断目标是否含有指定内容。
startsWith()
startsWith() 方法用来判断当前字符串是否以另外一个给定的子字符串开头,并根据判断结果返回 true 或 false。
endsWith()
显而易见,endsWith()方法与上面的startsWith()方法相反,可用来判断当前字符串是否以另外一个给定的子字符串开头。
repeat()
repeat()方法返回一个新字符串,新字符串是将原来的字符串重复n遍得到的。
字符串补全功能
ES2017引入了引入了字符串补全长度的功能,如果某个字符串不够指定长度,会在头部或者尾部补全。padStart()用于头部补全,padEnd()用于尾部补全。
console.log('P'.padEnd(10,'a')) //Paaaaaaaaa
console.log('P'.padStart(10,'a')) //aaaaaaaaaP
console.log('P'.padEnd(10,'abc'))//Pabcabcabc
console.log('P'.padStart(10,'abc'))//abcabcabcP