阮一峰es6要点总结——字符串扩展
2017-03-29 本文已影响0人
布蕾布蕾
笔记,完全摘录自阮一峰
全面支持两个双字节的Unicode码点
表示方法--大括号加码点
"\u{20BB7}"
// "𠮷"
"\u{41}\u{42}\u{43}"
// "ABC"
let hello = 123;
hell\u{6F} // 123
'\u{1F680}' === '\uD83D\uDE80'
// true
新增方法支持大码点
-
codePointAt()
,参数是字符在字符串中的位置(从0开始),能够正确识别4字节字符,但是,四字节字符会算作占据两个位置,即:
var s = '𠮷a';
s.codePointAt(0) // 134071
s.codePointAt(1) // 57271
s.codePointAt(2) // 97
在字符串的1位置,识别的不是字母a,而是汉字'𠮷'的后两个字节码点。
方法返回字符的十进制表示。
为解决上述问题,可以使用for...of
循环,因为它可以正确识别32位的字符。
var s = '𠮷a';
for (let ch of s) {
console.log(ch.codePointAt(0).toString(16));
}
// 20bb7
// 61
String.fromCodePoint()
与codePointAt()
方法对应,传入码点,返回字符,可传入多个参数,合并为一个字符串
-
at()
方法
charAt()
方法的升级,可以识别4字节字符 -
normalize()
Unicode正规化
可以正确整合,语调符号/重音符号等的,合成形式字符和纯字符。
比如:
Ǒ(\u01D1)
O(\u004F)和ˇ(\u030C)合成Ǒ(\u004F\u030C)。
'\u01D1'.normalize() === '\u004F\u030C'.normalize()
// true
自动补全
padStart()
和padEnd()
接受两个参数
- 指定字符串的最小长度
- 用来补全的字符串。
模板字符串
模板字符串(template string)是增强版的字符串,用反引号(`)标识。它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。
如果用模板字符串表示多行字符串,所有空格和缩进都会被保留在输出中。
模板字符串中嵌入变量,需要将变量名写在${}
之中。在大括号内部,可以进行运算,引用对象属性,调用函数
如果大括号中的值不是字符串,将按照一般的规则转为字符串。比如,大括号中是一个对象,将默认调用对象的toString
方法。
function authorize(user, action) {
if (!user.hasPrivilege(action)) {
throw new Error(
// 传统写法为
// 'User '
// + user.name
// + ' is not authorized to do '
// + action
// + '.'
`User ${user.name} is not authorized to do ${action}.`);
}
}
- 标签模板防止恶意输入
var message =
SaferHTML`<p>${sender} has sent you a message.</p>`;
function SaferHTML(templateData) {
var s = templateData[0];
for (var i = 1; i < arguments.length; i++) {
var arg = String(arguments[i]);
// Escape special characters in the substitution.
s += arg.replace(/&/g, "&")
.replace(/</g, "<")
.replace(/>/g, ">");
// Don't escape special characters in the template.
s += templateData[i];
}
return s;
}
其他方法
String.raw()
includes()
startsWith()
endsWith()
repeat()