字元串解讀 es6加強了對Unicode 的支持,允許\uxxxx的形式展現一個字元,例如: console.log('\u0061'); // 列印 a \u後面的為字元的 Unicode 碼點 \u 後面4位 xxxx 但是這種寫法只識別 \u0000 到 \UFFFF 之間的字元,超出需要使用 ...
字元串解讀
es6
加強了對Unicode
的支持,允許\uxxxx
的形式展現一個字元,例如:
console.log('\u0061'); // 列印 a
\u
後面的為字元的 Unicode
碼點 \u
後面4位 xxxx
但是這種寫法只識別 \u0000
到 \UFFFF
之間的字元,超出需要使用兩個雙位元組表示,例如:
console.log('\uD842\uDFB7'); // 列印 吉
如果說超出了\uxxxx
位元組的範圍,則為兩個位元組的拼接,例如:
console.log('\u20BB7'); // 輸出 ' 7' \u20BB系統識別為空
console.log('\u00617'); // 輸出 'a7'
\u0061
識別為a
,由於7
超出了這個位元組,所以為\u0061+7
,結果為a7
es6
對 Unicode
的支持進行了加強,如果超出了兩個位元組,放入大括弧內即可正常解讀
console.log("\u{20BB7}"); // 列印 吉
// 只要將碼點放入大括弧即可正確解讀
console.log('\u{41}\u{42}\u{43}'); // 輸出ABC
大括弧與雙位元組的寫法是等價的
console.log('\u{1F680}' == '\uD83D\uDE80'); // 大括弧與4位元組的寫法等價 輸出true
js對字元的幾種表現方法:
console.log('\z' === 'z');
console.log('\172' === 'z');
console.log('\x7A' === 'z');
console.log('\u007A' === 'z');
console.log('\u{7A}' === 'z');
console.log('z' === 'z');
字元串的遍歷
字元串遍歷for...of
for (let codePoint of 'foo') {
console.log(codePoint); // f o o
}
其實一般的遍歷,例如for
,也可以遍歷字元串,但是for
無法識別大於0xFFFF
的碼點,而for...of
則可以識別
let text = String.fromCodePoint(0x20BB7)
// for迴圈
for (let i = 0; i < text.length; i++) {
console.log(text[i]); // ' ' 空
}
// for---of可以識別 大於0xFFFF的碼點 , 而傳統的for無法識別
for (let i of text) {
console.log(i); // 吉
}
有些時候,我們在用JSON.stringify
轉字元串的時候,發現轉譯的字元串多了幾個\
根據標準,JSON
數據必須是 UTF-8
編碼。但是JSON.stringify()
方法有可能返回不符合 UTF-8
標準的字元串。
UTF-8
標準規定,0xD800
到0xDFFF
之間的碼點,不能單獨使用,必須配對使用。比如,\uD834\uDF06
是兩個碼點,但是必須放在一起配對使用,代表字元