美文网首页
阮一峰es6要点总结——字符串扩展

阮一峰es6要点总结——字符串扩展

作者: 布蕾布蕾 | 来源:发表于2017-03-29 10:03 被阅读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, "&amp;")
                .replace(/</g, "&lt;")
                .replace(/>/g, "&gt;");
    
        // Don't escape special characters in the template.
        s += templateData[i];
      }
      return s;
    }
    

    其他方法

    • String.raw()
    • includes()
    • startsWith()
    • endsWith()
    • repeat()

    相关文章

      网友评论

          本文标题:阮一峰es6要点总结——字符串扩展

          本文链接:https://www.haomeiwen.com/subject/bpxrottx.html