字符串的新增方法

String.fromCodePoint()

String.fromCharCode()方法不能識別碼點大于0xFFFF的字符,String.fromCodePoint()方法彌補了上述方法的不足

注意:fromCodePoint方法定義在String對象上,而codePointAt方法定義在字符串的實例對象上。

String.raw()

該方法返回一個斜杠都被轉(zhuǎn)義的字符串,如下

String.raw`Hi\\n`
// 返回 "Hi\\\\n"

String.raw`Hi\\n` === "Hi\\\\n" // true

String.raw()方法也可以作為一個正常的函數(shù)使用。第一個參數(shù)是一個具有raw屬性的對象,,raw屬性的值應(yīng)該是一個數(shù)組

String.raw({ raw: 'test' }, 0, 1, 2);
// 't0e1s2t'

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

codePointAt()

對于四個字節(jié)的字符,JavaScript不能正確處理,但codePointAt()方法能正確處理4個字節(jié)存儲的字符,返回一個字符的碼點

let s = '??a';

s.codePointAt(0) // 134071
s.codePointAt(1) // 57271

s.codePointAt(2) // 97

這個方法返回的碼點是十進(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??梢杂?code>for...of循環(huán)解決問題。另外,也可以用擴(kuò)展運算符(...)進(jì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()方法測試一個 字符由兩個字節(jié)還是四個字節(jié)組成的。

function is32Bit(c) {
  return c.codePointAt(0) > 0xFFFF;
}

is32Bit("??") // true
is32Bit("a") // false

normalize()

normalize()方法用來將字符的不同表示方法統(tǒng)一為同樣的形式,這稱為 Unicode 正規(guī)化。

normalize方法可以接受一個參數(shù)來指定normalize的方式,參數(shù)的四個可選值如下。

  • NFC,默認(rèn)參數(shù),表示“標(biāo)準(zhǔn)等價合成”,返回多個簡單字符的合成字符。所謂“標(biāo)準(zhǔn)等價”指的是視覺和語義上的等價。
  • NFD,表示“標(biāo)準(zhǔn)等價分解”,即在標(biāo)準(zhǔn)等價的前提下,返回合成字符分解的多個簡單字符。
  • NFKC,表示“兼容等價合成”,返回合成字符。所謂“兼容等價”指的是語義上存在等價,但視覺上不等價,比如“囍”和“喜喜”。(這只是用來舉例,normalize方法不能識別中文。)
  • NFKD,表示“兼容等價分解”,即在兼容等價的前提下,返回合成字符分解的多個簡單字符。

repeat()

這個方法返回一個字符串,表示將原字符串重復(fù)n次。如果參數(shù)是小數(shù),則會被取整。參數(shù)是負(fù)數(shù)或者Infinity,會報錯。

但是,如果參數(shù)是 0 到-1 之間的小數(shù),則等同于 0,這是因為會先進(jìn)行取整運算。

trimStart(),trimEnd()

trimStart()消除字符串頭部的空格,trimEnd()消除尾部的空格

參考資料

阮一峰《ECMAScript 6 入門

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容