国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

3 字符串的擴展

ssshooter / 1216人閱讀

摘要:字符的表示法允許采用碼點形式表示一個字符。但是,這種表示法只限于碼點在之間的字符,超出這個范圍的字符,必須用兩個雙字節的形式表示。比如,上面代碼中,字符在字符串的正確位置序號應該是,但是必須向方法傳入。

字符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"  //true
codePoint()

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解構賦值、擴展運算符、rest參數使用

    摘要:模板字符串甚至還能嵌套解構賦值允許按照一定模式,從數組和對象中提取值,對變量進行賦值,這被稱為解構。運算符使用場景應該稍少一些,主要是處理不定數量參數,可以避免對象的使用。 es6中較為常用的書寫風格 為了書寫的方便,es6中提出了很多比較友好的書寫方式,其中最為常見的屬于以下幾個: 字符串模板 `abcdef${test}` 解構賦值 let [a, b, c] = [1,...

    xuweijian 評論0 收藏0
  • 第6章 擴展函數與屬性

    摘要:項目實戰教程第章擴展函數與屬性在使用的時候,我們經常使用諸如等等一堆工具類,代碼寫起來也比較冗長。本章我們介紹的擴展函數和屬性。擴展函數中提供了非常簡單使用的擴展函數功能。 《Kotlin 項目實戰教程》 第6章 擴展函數與屬性 在使用Java的時候,我們經常使用諸如StringUtil, DateUtil等等一堆工具類,代碼寫起來也比較冗長。舉個例子,獲取一個字符串的第一個字符值、最...

    wangdai 評論0 收藏0
  • es6學習筆記--符串擴展、數組擴展、對象擴展

    摘要:字符串的擴展字符串的遍歷器接口字符串可以被循環遍歷。即能識別編號大于查詢字符串是否包含某個字符返回布爾值,表示是否找到了參數字符串。返回布爾值,表示參數字符串是否在原字符串的頭部。 字符串的擴展 1.字符串的遍歷器接口 字符串可以被for...of循環遍歷。 與es5的比較for循環雖可以遍歷字符串,但不能識別大于oxFFFF的編碼; 2.位置 --> 字符/碼點 根據指定位置返回對應...

    不知名網友 評論0 收藏0
  • ES6之數組擴展

    摘要:中對字符串函數對象數組等都進行了擴展,感覺目的呢就是完善一下所為外行人詬病的一些偽其實個人覺得不完美的才是真的美,什么東西都無懈可擊了就顯得不夠有趣了。 ES6中對字符串、函數、對象、數組等都進行了擴展,感覺目的呢就是完善一下JS所為外行人詬病的一些偽bug.其實個人覺得不完美的JS才是真的美,什么東西都無懈可擊了就顯得不夠有趣了。好了,接下來又要開始拾人牙慧了... 主要講解: ...

    Warren 評論0 收藏0
  • 與JavaScript戀愛之對象三個屬性

    摘要:為要檢測的對象構造函數創建的對象繼承了一個叫的屬性,該屬性指代該構造函數,即的原型。使用直接量創建的對象,也有一個叫的屬性,該屬性指代構造函數,所以直接量創建的對象的真正原型是,使用方法來檢測對象的原型并不可靠,在以后的文章中會提到。 一、原型屬性 1、對象的原型屬性是用來繼承屬性的,這個屬性如此重要,我們通常稱為:對象的原型屬性或對象的原型。對象的原型是在對象實例化的時候就設置好的...

    wanglu1209 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<