字符的Unicode表示法
JavaScript可以用Unicode表示一個(gè)字符,但是只限于碼點(diǎn)在\u0000
~\uffff
之間的字符超過的必須用雙字節(jié)表示.
但是ES6進(jìn)行了改進(jìn),只要將碼點(diǎn)放入大括號(hào),就能正確解讀
"\u20BB7" //超過0xFFFF 所以被解析成u20BB + 7
"\u{20BB7}"
codePointAt
該方法可以正確處理四字節(jié)處理的字符,并返回一個(gè)字符的碼點(diǎn)(十進(jìn)制)
對(duì)于兩個(gè)字節(jié)存儲(chǔ)的字符,返回結(jié)果與charCodeAt
方法相同
存在一個(gè)問題:參數(shù)不正確,對(duì)于四字節(jié)的字,會(huì)占用兩個(gè)位置,讀取第一個(gè)位置會(huì)返回正確的結(jié)果,第二個(gè)位置為該字符的后兩個(gè)字節(jié).解決方法使用 for...of
var s = '??a';
for (let ch of s) {
console.log(ch.codePointAt(0).toString(16));
}
String.fromCodePoint
該方法與String.fromCharCode
方法類似,單證方法能識(shí)別大于0xFFFF
的碼點(diǎn),如果有多個(gè)參數(shù),那么會(huì)被合并成一個(gè)字
String.fromCodePoint(0x78, 0x1f680, 0x79) === 'x\uD83D\uDE80y' //true
includes(), startsWith(), endsWith()
<small>includes()
:返回布爾值兔综,表示是否找到了參數(shù)字符串软驰。
startsWith()
:返回布爾值心肪,表示參數(shù)字符串是否在源字符串的頭部硬鞍。
endsWith()
:返回布爾值,表示參數(shù)字符串是否在源字符串的尾部锅减。</small>
三個(gè)方法都接受第二個(gè)參數(shù),表示從第幾位開始
repeat(),padStart(),padEnd()
repeat()
返回一個(gè)字符串,參數(shù)表示將原字符串重復(fù)多少次
'a'.repeat(2)// 'aaa'
padStart()
,padEnd)()
兩個(gè)方法,都是用來補(bǔ)全字符串前者頭部補(bǔ)全,后者尾部補(bǔ)全,兩個(gè)參數(shù),第一個(gè)指定字符串的最小長度,第二個(gè)用來補(bǔ)全的字符串,如果省略第二個(gè)參數(shù),則會(huì)用空格補(bǔ)全
'aaa'.padStart(10,'b') // 'bbbbbbbbaaa'
'aaa'.padEnd(10,'b') // 'aaabbbbbbbb'
字符串模板
增強(qiáng)版的字符串,用反引號(hào) ( ` )標(biāo)示.可以當(dāng)做普通字符串,也可以定義多行字符串,或嵌入變量
var name = 'abc'
var str = ` my name is ${name}` //'my name is abc'
大括號(hào)內(nèi)可以放入任意的表達(dá)式,或者函數(shù); 如果大括號(hào)中的值不是字符串,會(huì)按照一般規(guī)則轉(zhuǎn)為字符串
字符串模板也可以進(jìn)行嵌套
var data = [ {a:1,b:2}, {a:2,b:4} ]
var str = `<ul>
${data.map( (item)=>`<li>a:${item.a},b:${item.b}</li>` )}
</ul>`
//<ul>
<li>a:1,b:2</li>
<li>a:2,b:4</li>
</ul>
注意:模板字符串的空格和換行都會(huì)被保留..
此外,字符串模板的功能還有很多...