成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

3 字符串的擴(kuò)展

ssshooter / 1217人閱讀

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

字符Unicode的表示法

javascript允許采用 uxxxx(Unicode碼點) 形式表示一個字符。但是,這種表示法只限于碼點在u0000 ~ uFFFF之間的字符,超出這個范圍的字符,必須用兩個雙字節(jié)的形式表示。

"u20BB7"---會理解為 "u20BB+7" // " 7"

ES6 對這一點做出了改進(jìn),只需要將碼點放入大括號,就能正確解讀該字符

"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內(nèi)部,字符以UTF-16的格式儲存,每個字符固定為2個字節(jié)。對于那些需要4個字節(jié)儲存的字符(Unicode碼點大于0xFFFF的字符),JavaScript會認(rèn)為它們是兩個字符。

var s = "?";
s.length // 2
s.charAt(0) // ""
s.charAt(1) // ""
s.charCodeAt(0) // 55362
s.charCodeAt(1) // 57271

ES6提供了 codePointAt方法,能夠正確處理4個字節(jié)儲存的字符,返回一個字符的碼點

var s = "?a";
s.codePointAt(0) // 134071
s.codePointAt(1) // 57271
s.codePointAt(2) // 97

codePointAt方法的參數(shù),是字符在字符串中的位置(從0開始)。上面代碼中,JavaScript將“?a”視為三個字符,codePointAt方法在第一個字符上,正確地識別了“?”,返回了它的十進(jìn)制碼點134071(即十六進(jìn)制的20BB7)。在第二個字符(即“?”的后兩個字節(jié))和第三個字符“a”上,codePointAt方法的結(jié)果與charCodeAt方法相同。

總之,codePointAt方法會正確返回32位的UTF-16字符的碼點。對于那些兩個字節(jié)儲存的常規(guī)字符,它的返回結(jié)果與charCodeAt方法相同。

codePointAt方法返回的是碼點的十進(jìn)制值,如果想要十六進(jìn)制的值,可以使用toString方法轉(zhuǎn)換一下。

var s = "?a";
s.codePointAt(0).toString(16) // "20bb7"
s.codePointAt(2).toString(16) // "61"

你可能注意到了,codePointAt方法的參數(shù),仍然是不正確的。比如,上面代碼中,字符a在字符串s的正確位置序號應(yīng)該是1,但是必須向codePointAt方法傳入2。解決這個問題的一個辦法是使用for...of1循環(huán),因為它會正確識別32位的UTF-16字符。

var s = "?a";
for (let ch of s) {
  console.log(ch.codePointAt(0).toString(16));
}
// 20bb7
// 61

codePointAt方法是測試一個字符由兩個字節(jié)還是由四個字節(jié)組成的最簡單方法。

function is32Bit(c) {
  return c.codePointAt(0) > 0xFFFF;
} 
is32Bit("?") // true
is32Bit("a") // false

for-in 循環(huán)用來遍歷對象屬性;for-of 循環(huán)用來遍歷數(shù)據(jù)-例如數(shù)組中的值,但是不僅如此它還支持:大多數(shù)類數(shù)組對象、字符串遍歷(將字符串視為一系列的Unicode字符進(jìn)行遍歷)、Map對象遍歷、Set對象遍歷 ?

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/84582.html

相關(guān)文章

  • es6解構(gòu)賦值、擴(kuò)展運算符、rest參數(shù)使用

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

    xuweijian 評論0 收藏0
  • 第6章 擴(kuò)展函數(shù)與屬性

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

    wangdai 評論0 收藏0
  • es6學(xué)習(xí)筆記--符串擴(kuò)展、數(shù)組擴(kuò)展、對象擴(kuò)展

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

    不知名網(wǎng)友 評論0 收藏0
  • ES6之?dāng)?shù)組擴(kuò)展

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

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

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

    wanglu1209 評論0 收藏0

發(fā)表評論

0條評論

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