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