阮一峰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

新增方法支持大码点

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

codePointAt()方法对应,传入码点,返回字符,可传入多个参数,合并为一个字符串

可以正确整合,语调符号/重音符号等的,合成形式字符和纯字符。
比如:
Ǒ(\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, "&amp;")
            .replace(/</g, "&lt;")
            .replace(/>/g, "&gt;");

    // Don't escape special characters in the template.
    s += templateData[i];
  }
  return s;
}

其他方法

上一篇下一篇

猜你喜欢

热点阅读