String.fromCodePoint()
String.fromCharCode()
方法不能識別碼點(diǎn)大于0xFFFF的字符枉侧,String.fromCodePoint()
方法彌補(bǔ)了上述方法的不足
注意:fromCodePoint
方法定義在String
對象上至壤,而codePointAt
方法定義在字符串的實(shí)例對象上警儒。
String.raw()
該方法返回一個(gè)斜杠都被轉(zhuǎn)義的字符串谅将,如下
String.raw`Hi\\n`
// 返回 "Hi\\\\n"
String.raw`Hi\\n` === "Hi\\\\n" // true
String.raw()方法也可以作為一個(gè)正常的函數(shù)使用。第一個(gè)參數(shù)是一個(gè)具有raw屬性的對象噪径,换帜,raw屬性的值應(yīng)該是一個(gè)數(shù)組
String.raw({ raw: 'test' }, 0, 1, 2);
// 't0e1s2t'
// 等同于
String.raw({ raw: ['t','e','s','t'] }, 0, 1, 2);
codePointAt()
對于四個(gè)字節(jié)的字符,JavaScript不能正確處理涯塔,但codePointAt()方法能正確處理4個(gè)字節(jié)存儲的字符肌稻,返回一個(gè)字符的碼點(diǎn)
let s = '??a';
s.codePointAt(0) // 134071
s.codePointAt(1) // 57271
s.codePointAt(2) // 97
這個(gè)方法返回的碼點(diǎn)是十進(jìn)制的,可以用toString()
方法轉(zhuǎn)化成十六進(jìn)制的
let s = '??a';
s.codePointAt(0).toString(16) // "20bb7"
s.codePointAt(2).toString(16) // "61"
上面代碼的字符串‘a(chǎn)’應(yīng)該是在位置1的匕荸,但是必須向codePointAt()方法中傳入2爹谭。可以用for...of
循環(huán)解決問題榛搔。另外诺凡,也可以用擴(kuò)展運(yùn)算符(...
)進(jìn)行展開運(yùn)算
let s = '??a';
for (let ch of s) {
console.log(ch.codePointAt(0).toString(16));
}
// 20bb7
// 61
let arr = [...'??a']; // arr.length === 2
arr.forEach(
ch => console.log(ch.codePointAt(0).toString(16))
);
// 20bb7
// 61
可以用codePointAt()
方法測試一個(gè) 字符由兩個(gè)字節(jié)還是四個(gè)字節(jié)組成的东揣。
function is32Bit(c) {
return c.codePointAt(0) > 0xFFFF;
}
is32Bit("??") // true
is32Bit("a") // false
normalize()
normalize()
方法用來將字符的不同表示方法統(tǒng)一為同樣的形式,這稱為 Unicode 正規(guī)化腹泌。
normalize
方法可以接受一個(gè)參數(shù)來指定normalize
的方式嘶卧,參數(shù)的四個(gè)可選值如下。
-
NFC
凉袱,默認(rèn)參數(shù)芥吟,表示“標(biāo)準(zhǔn)等價(jià)合成”,返回多個(gè)簡單字符的合成字符专甩。所謂“標(biāo)準(zhǔn)等價(jià)”指的是視覺和語義上的等價(jià)运沦。 -
NFD
,表示“標(biāo)準(zhǔn)等價(jià)分解”配深,即在標(biāo)準(zhǔn)等價(jià)的前提下携添,返回合成字符分解的多個(gè)簡單字符。 -
NFKC
篓叶,表示“兼容等價(jià)合成”烈掠,返回合成字符。所謂“兼容等價(jià)”指的是語義上存在等價(jià)缸托,但視覺上不等價(jià)左敌,比如“囍”和“喜喜”。(這只是用來舉例俐镐,normalize
方法不能識別中文矫限。) -
NFKD
,表示“兼容等價(jià)分解”佩抹,即在兼容等價(jià)的前提下叼风,返回合成字符分解的多個(gè)簡單字符。
repeat()
這個(gè)方法返回一個(gè)字符串棍苹,表示將原字符串重復(fù)n次无宿。如果參數(shù)是小數(shù),則會被取整枢里。參數(shù)是負(fù)數(shù)或者Infinity
孽鸡,會報(bào)錯(cuò)。
但是栏豺,如果參數(shù)是 0 到-1 之間的小數(shù)彬碱,則等同于 0,這是因?yàn)闀冗M(jìn)行取整運(yùn)算奥洼。
trimStart(),trimEnd()
trimStart()
消除字符串頭部的空格巷疼,trimEnd()
消除尾部的空格
參考資料
阮一峰《ECMAScript 6 入門》