ES6 字符串的拓展&方法总结
字符的unicode表示法:
js允许采用\uxxxx形式表示一个字符,其中xxxx表示字符的Unicode码点。但是这种表示法仅限于码点在\u0000~\uFFFF之间的字符。超出了这个范围,必须用双字节的形式表示。
如:\uD8r2\uDFB7
es6改进地方:将码点放入大括号,就能正确读该字符。如:\u { 20BB7 }。 这种表示法与四字节的UTF-16编码等价的。
js中,字符以utf-16格式储存,每个字符固定2个字节,对于需要4个字节储存的字符(Unicode码点大于oxFFFF),js会认为是2个字符。
charAt 无法读取整个字符串
charCodeAt 只能分别返回前两个字节和后两个字节的值
es6:
codePointAt 正确处理4个字节(32位的utf-16)的字符,返回一个字符的码点(十进制)
codePointAt(0) 参数0 是字符串中的位置
codePointAt 测试一个字符有两个字节还是四个字节组成的最简单方法
for...of循环,会正确识别32位的UTF-16字符。
String.fromCharCode() es5 用于从码点返回对应字符串,不能识别32为的utf-16(Unicode编号大于0xFFFF)
es6:
String.fromCodePoint() 可识别大于0xFFFF的字符,弥补fromCharCode的不足。该方法可有多个参数,它们会被合并成一个字符串返回。
注意:fromCodePoint方法定义在String对象上,而codePointAt方法定义在字符串的实例对象上。
charAt() 返回字符串给定位置的字符,该方法不能识别码点大于0xFFFF
es6:
at() 可以识别Unicode编号大于0xFFFF的字符
normalize() 用来将字符的不同表示方法统一为同样的形式,这称为Unicode正规化。
该方法接收一个参数来指定normalize的方式。参数值:NFC,NFD,NFKC,NFKD
es5:
indexOf() 方法 用来确定一个字符串是否包含在另一个字符串
es6:
includes() 返回布尔值,表示是否找到了参数字符串
startsWith() 返回布尔值。表示参数字符串是否在原字符串的头部。
endsWith() 返回布尔值。 表示参数字符串是否在原字符串的尾部。
以上三个方法,第一个为参数字符串,第二个:开始搜索的位置。
repeat(n) 返回一个新字符串,表示将原字符串重复n次
参数如果是小数,会被取整。参数不允许负数和Infinity。0-1之间取0,NaN= 0,
若参数是字符串,则先转为数字,只能是‘数字’ ,不能是“2a" "a2" ,这样会返回空字符串
padStart() padEnd() 字符串补全长度功能 如果某个字符串不够自定长度,会在头部或尾部补全
接受两个参数
第一个:字符串补全生效的最大长度,原字符串长<=长度,返回原字符串;否则,截去超出字符串
第二个:用来补全的字符串,若省略则会使用空格来补全长度
常见用途:为数值补全指定位数、提示字符串格式
matchAll() 返回一个正则表达式在当前字符串的所有匹配
“标签模板” 的一个重要应用,除了当作普通字符串使用,还可定义多行字符串, ${变量,函数调用,任意js表达式}, 过滤html字符串,防止用户输入恶意内容。
另一个应用:多语言转换(国际化处理)
String.raw() 往往用来充当模板字符串的处理函数,返回一个斜杠都被转义(即斜杠前面再加一个斜杠)的字符串,对应于替换变量后的模板字符串。