String.fromCodePoint()

admin發表於2019-01-31

String.fromCodePoint方法可以返回Unicode碼點值對應的字元,ES2015新增。

與String.fromCharCode方法的功能相同,但是功能更加完善,能夠識別大於0xFFFF的碼值。

關於String.fromCharCode方法更多內容參閱JavaScript fromCharCode()一章節。

此方法的出現自然有其原因,後面會通過程式碼例項更加詳細的介紹此ES2015新增此方法的必要性。

語法結構:

[JavaScript] 純文字檢視 複製程式碼
String.fromCodePoint([code1[, code2[, ...[, codeN]]]])

引數解析:

(1).codeN:可選,要轉換為字串的一系列 Unicode碼值。不提供引數,則結果為空字串。

特別說明:fromCodePoint方法是靜態方法,直接使用類String呼叫,而不是字串例項。

瀏覽器支援:

(1).IE9+瀏覽器支援此方法。

(2).edge瀏覽器支援此方法。

(3).谷歌瀏覽器支援此方法。

(4).火狐瀏覽器支援此方法。

(5).opera瀏覽器支援此方法。

(6).safria瀏覽器支援此方法。

程式碼例項如下:

絕大多數情況,String.fromCharCode方法完全可以滿足需要,因為絕大多數字符都是通過兩個位元組儲存。

但是由於隨著國際字元數量的增多,兩個位元組已經無法滿足需要,所以新增的字元通過四個位元組儲存,但String.fromCharCode方法無法識別四個位元組儲存的字元。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
console.log(String.fromCharCode(65));

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201901/31/230519qj3kv71kvyzvjky7.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

上述程式碼可以利用String.fromCodePoint方法返回65碼點值對應的字元"A"。

引數可以有多個碼點值構成,之間用逗號分隔。再來看一段程式碼例項:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
console.log(String.fromCharCode(0b1000001));

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201901/31/230545rwwawqrqd5an1phz.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

引數不但可以是十進位制也可以是二進位制,也可以是八進位制或者其他進位制。

考慮到篇幅,下面不再一一演示,感興趣的可以自行進行一下測試。

String.fromCodePoint方法可以完成絕大多數任務,但是遇到四個位元組儲存的字元就無能為力了。

[JavaScript] 純文字檢視 複製程式碼執行程式碼
console.log(String.fromCharCode(0x20BB7));

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201901/31/230610pllukh3hkzdkmltk.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

引數碼點值大於0xFFFF,所以方法的返回值是一個亂碼,無法正確識別。

使用String.fromCodePoint方法可以解決此問題,程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
console.log(String.fromCodePoint(0x20BB7))

程式碼執行效果截圖如下:

a:3:{s:3:\"pic\";s:43:\"portal/201901/31/230635iq4z529hly6pnpnq.png\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

可以正確列印出碼值對應的字元,注意,列印出的字元並不是"吉祥"的"吉"。

當然此方法也可以一次性傳遞多個引數,非常簡單,不再進行演示。

還需要注意一點,不要認為此方法只能返回碼點值大於0xFFFF的字元,對於小於0xFFFF碼點值同樣有效。

所以說它是String.fromCharCode方法的加強版本,是功能的擴充和加強。