美文网首页
ES6学习笔记三|字符串扩展

ES6学习笔记三|字符串扩展

作者: ForeverYoung20 | 来源:发表于2016-10-31 16:59 被阅读32次

    1. 字符的Unicode表示法

    如果直接在“\u”后面跟上超过0xFFFF的数值(比如\u20BB7),JavaScript会理解成“\u20BB+7”。由于\u20BB是一个不可打印字符,所以只会显示一个空格,后面跟着一个7。
    ES6对这一点做出了改进,只要将码点放入大括号,就能正确解读该字符。

    "\u{20BB7}"   // "𠮷""
    \u{41}\u{42}\u{43}"    // "ABC"
    let hello = 123;
    hell\u{6F}    // 123
    '\u{1F680}' === '\uD83D\uDE80'   // true
    

    有了这种表示法之后,JavaScript共有6种方法可以表示一个字符。

    '\z' === 'z'  // true
    '\172' === 'z' // true
    '\x7A' === 'z' // true
    '\u007A' === 'z' // true
    '\u{7A}' === 'z' // true
    

    2. codePointAt()

    ES6提供了codePointAt方法,能够正确处理4个字节储存的字符,返回一个字符的码点。

    var s = '𠮷a';
    s.codePointAt(0) // 134071
    s.codePointAt(1) // 57271
    s.charCodeAt(2) // 97
    

    3. String.fromCodePoint()

    ES6提供了String.fromCodePoint方法,可以识别大于0xFFFF的字符,弥补了String.fromCharCode方法的不足。在作用上,正好与codePointAt方法相反。

    4. 字符串的遍历器接口

    for (let codePoint of 'foo') {
        console.log(codePoint);
    }    //"f","o","o"
    
    • 优点:可以识别大于0xFFFF的码点。

    5. at()

    • 优点:可以识别Unicode编号大于0xFFFF的字符,返回正确的字符。
    'abc'.at(0) // "a"
    '𠮷'.at(0) // "𠮷"
    

    6. normalize()

    7. includes(),startsWith(),endsWith()

    • includes():返回布尔值,表示是否找到了参数字符串。
    • startsWith():返回布尔值,表示参数字符串是否在源字符串的头部。
    • endsWith():返回布尔值,表示参数字符串是否在源字符串的尾部。
      这三个方法都支持第二个参数,表示开始搜索的位置。

    使用第二个参数n时,endsWith的行为与其他两个方法有所不同。它针对前n个字符,而其他两个方法针对从第n个位置直到字符串结束。

    8. repeat()

    • repeat方法返回一个新字符串,表示将原字符串重复n次
    • 如果是小数,会被取整。
    • 如果参数是负数或者infinity,报错。
    • 如果是0到-1之间的小数,等同于0.
    • 参数NaN等同于0.
    • 如果参数是字符串,则会先转换成数字。

    9. padStart(),padEnd()

    ES6推出了字符串补全长度的功能。如果某个字符串不够指定长度,会在头部或尾部补全。padStart
    用于头部补全,padEnd用于尾部补全。

    'x'.padStart(5, 'ab') // 'ababx'
    'x'.padStart(4, 'ab') // 'abax'
    'x'.padEnd(5, 'ab') // 'xabab'
    'x'.padEnd(4, 'ab') // 'xaba'
    
    • 如果原字符串的长度,等于或大于指定的最小长度,则返回原字符串。
    • 如果用来补全的字符串与原字符串,两者的长度之和超过了指定的最小长度,则会截去超出位数的补全字符串。
    • 如果省略第二个参数,则会用空格补全长度。
    • padStart的常见用途是为数值补全指定位数。
    '1'.padStart(10, '0') // "0000000001"
    '12'.padStart(10, '0') // "0000000012"
    '123456'.padStart(10, '0') // "0000123456"
    
    • 另一个用途是提示字符串格式。
    '12'.padStart(10, 'YYYY-MM-DD') // "YYYY-MM-12"
    '09-12'.padStart(10, 'YYYY-MM-DD') // "YYYY-09-12"
    

    10. 模板字符串

    传统的JavaScript语言,输出模板如下:

    $('#result').append( 
        'There are <b>' + basket.count + '</b> ' + 
        'items in your basket, ' + 
        '<em>' + basket.onSale + 
        '</em> are on sale!'
    );
    

    ES6引入了模板字符串,如下:

    $('#result').append(
        ` There are <b>${basket.count}</b> items 
        in your basket, <em>${basket.onSale}</em> 
        are on sale!`
    );
    
    • 模板字符串中嵌入变量,需要将变量名写在${}中。
    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}.`); 
         }
    }
    
    • 大括号内部可以放入任意的JavaScript表达式,可以进行运算,以及引用对象属性。
    var x =1; 
    var y = 2;
    '${x} + ${y} = ${x+y};
    // 1 + 2 = 3
    
    • 模板字符串之中还能调用函数

    如果大括号中的值不是字符串,将按照一般的规则转为字符串。如:大括号中是一个对象,将默认调用对象的toString方法。

    • 如果模板字符串中的变量没有声明,报错。
    • 如果大括号中是一个字符串,将原样输出。
    • 模板字符串可以嵌套。

    11. 标签模板

    模板字符串可以紧跟在一个函数后面,该函数被调用来处理这个模板字符串。

    alert '123';
    //等同于
    alert(123);
    

    12. String.raw()

    • 该方法往往用来充当模板字符串的处理函数,返回一个斜杠都被转义(即斜杠钱再加一个斜杠)的字符串,对应于替换变量后的模板字符串。
      String.rawHi\n${2+3}!;
      // "Hi\n5!"

      String.raw`Hi\u000A!`;
      // 'Hi\\u000A!'
      
    • 如果原字符串的斜杠已经转义,那么String.raw不会做任何处理。

    • String.raw方法也可以作为正常的函数使用。这时,它的第一个参数,应该是一个具有raw属性的对象,且raw属性的值应该是一个数组。

    String.raw({ raw: 'test' }, 0, 1, 2);// 't0e1s2t'
    // 等同于
    String.raw({ raw: ['t','e','s','t'] }, 0, 1, 2);
    

    相关文章

      网友评论

          本文标题:ES6学习笔记三|字符串扩展

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