JavaScript字符串的長(zhǎng)度問題
字符串的長(zhǎng)度 length
描述:JavaScript提供了一系列方法,來幫助我們更好的使用字符串
1.測(cè)量字符串長(zhǎng)度:length屬性
描述:length屬性返回字符串的長(zhǎng)度和字符串的個(gè)數(shù)
語(yǔ)法:字符串變量名.length
?? ?var i = "你好"; ?? ?var result = i.length; ?? ?console.log(result);
2.字符索引:[]方法
描述:字符串后面接中括號(hào),中括號(hào)中寫數(shù)字,能夠訪問字符串中的所有個(gè)數(shù)
語(yǔ)法:字符串變量名[]
?? ?var i = ["寶馬","法拉利","蘭博基尼"]; ?? ?var c = i[1]; ?? ?console.log(c);
3.獲取指定位置字符:charAt()方法和CharCodeAt()方法
描述:charAt()方法和CharCodeAt()兩者都是表示獲取指定位置的字符
charAt()
描述:根據(jù)指定位置的索引返回具體的字符
?? ?var i = 'niHaoWoShi'; ?? ?var j = i.charAt(2); ?? ?console.log(i.charAt(2));
CharCodeAt()
描述:返回的是字符對(duì)應(yīng)的Unicode編
注意:如果charCodeAt返回的值是:負(fù)數(shù)或大于字符串的長(zhǎng)度則會(huì)返回的值是NaN
?? ?var j = i.charCodeAt(2); ?? ?console.log(j);
4.字符串連接:concat()方法
描述:concat()方法能夠?qū)⒍鄠€(gè)字符串連接起來,合成一個(gè)新的字符串
語(yǔ)法:字符串變量1.concat(字符串變量2,字符串變量3);
?? ?var str = 'niHaoWoShi'; ?? ?var str2 = 'hello'; ?? ?var str3 = 'sxt'; ?? ?var i = str.concat(str2,str3); ?? ?console.log(i);
JavaScript字符串長(zhǎng)度返回錯(cuò)誤的原因
JavaScript 使用 Unicode 字符集。JavaScript 引擎內(nèi)部,所有字符都用 Unicode 表示。
每個(gè)字符在 JavaScript 內(nèi)部都是以16位(即2個(gè)字節(jié))的 UTF-16 格式儲(chǔ)存。也就是說,JavaScript 的單位字符長(zhǎng)度固定為16位長(zhǎng)度,即2個(gè)字節(jié)。
但是,UTF-16 有兩種長(zhǎng)度:對(duì)于碼點(diǎn)在U+0000到U+FFFF之間的字符,長(zhǎng)度為16位(即2個(gè)字節(jié));對(duì)于碼點(diǎn)在U+10000到U+10FFFF之間的字符,長(zhǎng)度為32位(即4個(gè)字節(jié))。
JavaScript 對(duì) UTF-16 的支持是不完整的,由于歷史原因,只支持兩字節(jié)的字符,不支持四字節(jié)的字符。
'??'.length // 2
上面代碼中,JavaScript 認(rèn)為??的長(zhǎng)度為2,而不是1。
總結(jié)一下,對(duì)于碼點(diǎn)在U+10000到U+10FFFF之間的字符,JavaScript 總是認(rèn)為它們是兩個(gè)字符(length屬性為2)。所以處理的時(shí)候,必須把這一點(diǎn)考慮在內(nèi),也就是說,JavaScript 返回的字符串長(zhǎng)度可能是不正確的。
ES6加強(qiáng)了對(duì)unicode的支持,以前必須拆分成2個(gè)2字節(jié)unicode碼表示的字符,現(xiàn)在可以用大括號(hào)括起來,直接用一個(gè)碼點(diǎn)表示。
'\u{1F680}' === '\uD83D\uDE80' // true
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript對(duì)象解構(gòu)的用法實(shí)例解析
解構(gòu)賦值允許你使用類似數(shù)組或?qū)ο笞置媪康恼Z(yǔ)法將數(shù)組和對(duì)象的屬性賦給各種變量,下面這篇文章主要給大家介紹了關(guān)于JavaScript對(duì)象解構(gòu)用法的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-01-01JavaScript防抖與節(jié)流的實(shí)現(xiàn)與注意事項(xiàng)
防抖和節(jié)流嚴(yán)格算起來應(yīng)該屬于性能優(yōu)化的知識(shí),但實(shí)際上遇到的頻率相當(dāng)高,處理不當(dāng)或者放任不管就容易引起瀏覽器卡死,下面這篇文章主要給大家介紹了關(guān)于JavaScript防抖與節(jié)流的實(shí)現(xiàn)與注意事項(xiàng),需要的朋友可以參考下2022-03-03js函數(shù)setTimeout延遲執(zhí)行的簡(jiǎn)單介紹
設(shè)置指定的JS函數(shù)在指定的時(shí)間后執(zhí)行,可以利用setTimeout()函數(shù)。2013-07-07Web網(wǎng)站都變成灰色有哪些方法可以快速實(shí)現(xiàn)(解決方案)
有些時(shí)候我們需要把網(wǎng)站頁(yè)面變成黑白色或灰色,特別是對(duì)于一些需要悼念的日子,以及一些影響力很大的偉人逝世或紀(jì)念日的時(shí)候,都會(huì)讓網(wǎng)站的全部網(wǎng)頁(yè)變成灰色(黑白色),以表示我們對(duì)逝者或者英雄的緬懷和悼念2022-12-12JS設(shè)計(jì)模式之觀察者模式實(shí)現(xiàn)實(shí)時(shí)改變頁(yè)面中金額數(shù)的方法
這篇文章主要介紹了JS設(shè)計(jì)模式之觀察者模式實(shí)現(xiàn)實(shí)時(shí)改變頁(yè)面中金額數(shù)的方法,結(jié)合實(shí)例形式對(duì)比分析了javascript基于觀察者模式實(shí)時(shí)改變頁(yè)面金額數(shù)的相關(guān)操作技巧,需要的朋友可以參考下2018-02-02