摘要:字符的表示法允許采用碼點形式表示一個字符。但是,這種表示法只限于碼點在之間的字符,超出這個范圍的字符,必須用兩個雙字節的形式表示。比如,上面代碼中,字符在字符串的正確位置序號應該是,但是必須向方法傳入。
字符Unicode的表示法
javascript允許采用 uxxxx(Unicode碼點) 形式表示一個字符。但是,這種表示法只限于碼點在u0000 ~ uFFFF之間的字符,超出這個范圍的字符,必須用兩個雙字節的形式表示。
"u20BB7"---會理解為 "u20BB+7" // " 7"
ES6 對這一點做出了改進,只需要將碼點放入大括號,就能正確解讀該字符
"u{20BB7}" //"?" "u{41}u{42}u{43}" //ABC let hello = 123; hellu{6F} // 123 "u{1F680}" === "uD83DuDE80" // true
有了這種表示法之后,Javascript共有6種方法可以表示一個字符
"z" === "z" //true "172" === "z" //true "x7A" === "z" //true "u007A" === "z" //true "u{7A}" === "z" //truecodePoint()
JavaScript內部,字符以UTF-16的格式儲存,每個字符固定為2個字節。對于那些需要4個字節儲存的字符(Unicode碼點大于0xFFFF的字符),JavaScript會認為它們是兩個字符。
var s = "?"; s.length // 2 s.charAt(0) // "" s.charAt(1) // "" s.charCodeAt(0) // 55362 s.charCodeAt(1) // 57271
ES6提供了 codePointAt方法,能夠正確處理4個字節儲存的字符,返回一個字符的碼點
var s = "?a"; s.codePointAt(0) // 134071 s.codePointAt(1) // 57271 s.codePointAt(2) // 97
codePointAt方法的參數,是字符在字符串中的位置(從0開始)。上面代碼中,JavaScript將“?a”視為三個字符,codePointAt方法在第一個字符上,正確地識別了“?”,返回了它的十進制碼點134071(即十六進制的20BB7)。在第二個字符(即“?”的后兩個字節)和第三個字符“a”上,codePointAt方法的結果與charCodeAt方法相同。
總之,codePointAt方法會正確返回32位的UTF-16字符的碼點。對于那些兩個字節儲存的常規字符,它的返回結果與charCodeAt方法相同。
codePointAt方法返回的是碼點的十進制值,如果想要十六進制的值,可以使用toString方法轉換一下。
var s = "?a"; s.codePointAt(0).toString(16) // "20bb7" s.codePointAt(2).toString(16) // "61"
你可能注意到了,codePointAt方法的參數,仍然是不正確的。比如,上面代碼中,字符a在字符串s的正確位置序號應該是1,但是必須向codePointAt方法傳入2。解決這個問題的一個辦法是使用for...of1循環,因為它會正確識別32位的UTF-16字符。
var s = "?a"; for (let ch of s) { console.log(ch.codePointAt(0).toString(16)); } // 20bb7 // 61
codePointAt方法是測試一個字符由兩個字節還是由四個字節組成的最簡單方法。
function is32Bit(c) { return c.codePointAt(0) > 0xFFFF; } is32Bit("?") // true is32Bit("a") // false
for-in 循環用來遍歷對象屬性;for-of 循環用來遍歷數據-例如數組中的值,但是不僅如此它還支持:大多數類數組對象、字符串遍歷(將字符串視為一系列的Unicode字符進行遍歷)、Map對象遍歷、Set對象遍歷 ?
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/84582.html
摘要:模板字符串甚至還能嵌套解構賦值允許按照一定模式,從數組和對象中提取值,對變量進行賦值,這被稱為解構。運算符使用場景應該稍少一些,主要是處理不定數量參數,可以避免對象的使用。 es6中較為常用的書寫風格 為了書寫的方便,es6中提出了很多比較友好的書寫方式,其中最為常見的屬于以下幾個: 字符串模板 `abcdef${test}` 解構賦值 let [a, b, c] = [1,...
摘要:項目實戰教程第章擴展函數與屬性在使用的時候,我們經常使用諸如等等一堆工具類,代碼寫起來也比較冗長。本章我們介紹的擴展函數和屬性。擴展函數中提供了非常簡單使用的擴展函數功能。 《Kotlin 項目實戰教程》 第6章 擴展函數與屬性 在使用Java的時候,我們經常使用諸如StringUtil, DateUtil等等一堆工具類,代碼寫起來也比較冗長。舉個例子,獲取一個字符串的第一個字符值、最...
摘要:字符串的擴展字符串的遍歷器接口字符串可以被循環遍歷。即能識別編號大于查詢字符串是否包含某個字符返回布爾值,表示是否找到了參數字符串。返回布爾值,表示參數字符串是否在原字符串的頭部。 字符串的擴展 1.字符串的遍歷器接口 字符串可以被for...of循環遍歷。 與es5的比較for循環雖可以遍歷字符串,但不能識別大于oxFFFF的編碼; 2.位置 --> 字符/碼點 根據指定位置返回對應...
摘要:為要檢測的對象構造函數創建的對象繼承了一個叫的屬性,該屬性指代該構造函數,即的原型。使用直接量創建的對象,也有一個叫的屬性,該屬性指代構造函數,所以直接量創建的對象的真正原型是,使用方法來檢測對象的原型并不可靠,在以后的文章中會提到。 一、原型屬性 1、對象的原型屬性是用來繼承屬性的,這個屬性如此重要,我們通常稱為:對象的原型屬性或對象的原型。對象的原型是在對象實例化的時候就設置好的...
閱讀 1852·2021-08-19 11:12
閱讀 1426·2021-07-25 21:37
閱讀 990·2019-08-30 14:07
閱讀 1269·2019-08-30 13:12
閱讀 653·2019-08-30 11:00
閱讀 3530·2019-08-29 16:28
閱讀 995·2019-08-29 15:33
閱讀 2972·2019-08-26 13:40