[1]概述 [2]大括弧表示 [3]字元編解碼 [4]for...of [5]normalize() [6]U修飾符 ...
前面的話
JS中的字元串類型是由引號括起來的一組由16位Unicode字元組成的字元序列。在過去,16位足以包含任何字元,直到Unicode引入了擴展字元集,編碼規則不得不進行變更。本文將詳細介紹ES6關於Unicode的相關擴展
概述
Unicode的目標是為世界上每一個字元提供唯一標識符,唯一標識符稱為碼位或碼點(code point)。而這些碼位是用於表示字元的,又稱為字元編碼(character encode)
在ES6之前, JS 的字元串以 16 位字元編碼(UTF-16)為基礎。每個 16 位序列(相當於2個位元組)是一個編碼單元(code unit),可簡稱為碼元,用於表示一個字元。字元串所有的屬性與方法(如length屬性與charAt() 方法等)都是基於16位序列
【BMP】
最常用的Unicode字元使用16位序列編碼字元,屬於“基本多語種平面”(Basic Multilingual Plane BMP),也稱為“零斷面”(plan 0), 是Unicode中的一個編碼區段,編碼介於U+0000——U+FFFF之間。超過這個範圍的碼位則要歸屬於某個輔助平面或稱為擴展平面(supplementary plane),其中的碼位僅用16位就無法表示了
為此,UTF-16引入了代理對(surrogate pairs),規定用兩個16位編碼來表示一個碼位。這意味著,字元串里的字元有兩種:一種由一個碼元(共 16 位)來表示BMP字元,另一種用兩個碼元(共 32 位)來表示輔助平面字元
大括弧表示
JavaScript 允許採用\uxxxx
形式表示一個字元,其中xxxx
表示字元的 Unicode 碼位
// "a" console.log("\u0061");
但是,這種表示法只限於碼位在\u0000
~\uFFFF
之間的字元。超出這個範圍的字元,必須用兩個雙位元組的形式表示
// "