天天看點

ECMAScript 6 -- 字元串的擴充

字元串可以被<code>for...of</code>循環周遊。

這個周遊器最大的優點是可以識别大于<code>0xFFFF</code>的碼點,傳統的<code>for</code>循環無法識别這樣的碼點。

ES5對字元串對象提供<code>charAt</code>方法,傳回字元串給定位置的字元。該方法不能識别碼點大于<code>0xFFFF</code>的字元。

<code>normalize</code>方法可以接受一個參數來指定<code>normalize</code>的方式,參數的四個可選值如下。

<code>NFC</code>,預設參數,表示“标準等價合成”(Normalization Form Canonical Composition),傳回多個簡單字元的合成字元。所謂“标準等價”指的是視覺和語義上的等價。

<code>NFD</code>,表示“标準等價分解”(Normalization Form Canonical Decomposition),即在标準等價的前提下,傳回合成字元分解的多個簡單字元。

<code>NFKC</code>,表示“相容等價合成”(Normalization Form Compatibility Composition),傳回合成字元。所謂“相容等價”指的是語義上存在等價,但視覺上不等價,比如“囍”和“喜喜”。(這隻是用來舉例,<code>normalize</code>方法不能識别中文。)

<code>NFKD</code>,表示“相容等價分解”(Normalization Form Compatibility Decomposition),即在相容等價的前提下,傳回合成字元分解的多個簡單字元。

includes():傳回布爾值,表示是否找到了參數字元串。

startsWith():傳回布爾值,表示參數字元串是否在源字元串的頭部。

endsWith():傳回布爾值,表示參數字元串是否在源字元串的尾部。

結果:

true

<code>endsWith</code>的行為與其他兩個方法有所不同。它針對前<code>n</code>個字元,而其他兩個方法針對從第<code>n</code>個位置直到字元串結束。

false

<code>repeat</code>方法傳回一個新字元串,表示将原字元串重複<code>n</code>次。

hellohello

ES2017 引入了字元串補全長度的功能。如果某個字元串不夠指定長度,會在頭部或尾部補全。<code>padStart()</code>用于頭部補全,<code>padEnd()</code>用于尾部補全。

ababx

abax

xabab

xaba

模闆字元串(template string)是增強版的字元串,用反引号(`)辨別。它可以當作普通字元串使用,也可以用來定義多行字元串,或者在字元串中嵌入變量。

Hello Bob, how are you today?

引用模闆字元串本身,在需要時執行,可以像下面這樣寫:

Hello Jack!

繼續閱讀