99% 開發(fā)者都不知道的 JS 冷知識(shí)系列(一)
此系列目的是通過簡(jiǎn)短的內(nèi)容讓讀者迅速了解到一個(gè) JS 的冷知識(shí),如果想更進(jìn)一步學(xué)習(xí)的話可以把文中的知識(shí)點(diǎn)深挖以下。
獲取字符串的長(zhǎng)度想必大家都是常用的:
- '1'.length // -> 1
但是在某些情況下,獲取字符串長(zhǎng)度可能并不如你所想的一樣,比如說某些 emoji 甚至是漢字
- '👨👩👧👦'.length // ???
你可能會(huì)認(rèn)為我這只用了一個(gè) emoji,那么長(zhǎng)度應(yīng)該是 1,但是實(shí)際上輸出的內(nèi)容為 11~
筆者來簡(jiǎn)單的說下這是為什么。
字符是通過 Unicode 來表示的,JS 的字符編碼是 UCS-2,這個(gè)編碼規(guī)則是每?jī)勺止?jié)代表一個(gè)字符,然后 JS 內(nèi)部獲取字符串長(zhǎng)度是通過計(jì)算字符長(zhǎng)度來得到的。
Unicode 字符分為 17 組平面,第一個(gè)平面稱為基本平面,Unicode碼位范圍為 U+0000 - U+FFFF,其他都叫做補(bǔ)充平面。對(duì)于 UCS-2 編碼來說除了基礎(chǔ)平面的字符長(zhǎng)度為 1 以外,其他都為 2。
對(duì)于 '👨👩👧👦' 來說,它是由四個(gè)補(bǔ)充平面的碼位及三個(gè)基礎(chǔ)平面的碼位組成,所以它的字符長(zhǎng)度為 11。每個(gè) emoji 都有它各自的編碼信息,你可以在網(wǎng)上自行查詢。
最后說個(gè)好玩的,對(duì)于 emoji 來說,我們可以對(duì)它進(jìn)行結(jié)構(gòu),然后神奇的事情又發(fā)生了:
總結(jié)
文章簡(jiǎn)短,所以知識(shí)就是帶過,畢竟大部分冷知識(shí)腦子里有個(gè)印象即可,如果你有興趣繼續(xù)學(xué)習(xí),可以去了解以下知識(shí)點(diǎn):
- 字符編碼分為哪幾種
- Unicode 編碼相關(guān)
- emoji 編碼信息