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

2016-10-31  本文已影响32人  ForeverYoung20

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"

5. at()

'abc'.at(0) // "a"
'𠮷'.at(0) // "𠮷"

6. normalize()

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

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

8. repeat()

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'
'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}.`); 
     }
}
var x =1; 
var y = 2;
'${x} + ${y} = ${x+y};
// 1 + 2 = 3

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

11. 标签模板

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

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

12. String.raw()

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

猜你喜欢

热点阅读