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

資訊專欄INFORMATION COLUMN

淺談JS字符串的三個(gè)方法

smartlion / 2466人閱讀

摘要:該方法會(huì)改變調(diào)用該方法的對(duì)象有返回值如的方法,會(huì)改變一個(gè)數(shù)組本身的順序,并且返回一個(gè)按要求排列的數(shù)組像的方法是不會(huì)改變?cè)瓕?duì)象的方法是否是靜態(tài)的例如的方法都是靜態(tài)方法最后一點(diǎn)純屬個(gè)人惡趣味,我會(huì)把一些明顯不符合要求的值傳入,看看是否出現(xiàn)異常。

正文

每次遇到某個(gè)類型陌生的方法的時(shí)候,我通常會(huì)思考這樣幾個(gè)問題:

該方法需要的傳入?yún)?shù):

不需要傳參數(shù)的:諸如Array的pop方法;

有必傳參數(shù)?默認(rèn)值是多少?例如前文所訴的parseInt方法;parseInt確實(shí)可以不傳,但是沒什么實(shí)際意義,會(huì)返回NaN;

但是某些方法如Number的toString方法,可接受一個(gè)參數(shù)即進(jìn)制數(shù),不傳默認(rèn)值是10。

該方法會(huì)改變調(diào)用該方法的對(duì)象?有返回值?

如Array的sort方法,會(huì)改變一個(gè)數(shù)組本身的順序,并且返回一個(gè)按要求排列的數(shù)組;

像Array的join方法是不會(huì)改變?cè)瓕?duì)象的;

方法是否是靜態(tài)的:

例如Math的方法都是靜態(tài)方法

最后一點(diǎn)純屬個(gè)人惡趣味,我會(huì)把一些明顯不符合要求的值傳入,看看是否出現(xiàn)異常。

今天的故事從String的三個(gè)方法說起

他們是slice,substring和subset(注意后面這兩貨都沒有一個(gè)大寫字母)

方法的日常

為什么單單說這三個(gè)?因?yàn)樗鼈冮L(zhǎng)得像,用途也像屬于殊途同歸的方法(其實(shí)Array,String的一些方法真心讓人容易混長(zhǎng)得像,用途迥異的如slice,splice,splite這三,以后找時(shí)間再說說他們仨的故事)

String的slice,substring和subsrt方法都能返回一個(gè)子字符串并且不改變?cè)址?,其中?/p>

slice方法:接受兩個(gè)參數(shù),即起始位置與終點(diǎn)位置;

"Hi Master Yoda".slice(1,3) //"i "

substring方法:接受兩個(gè)參數(shù),即起始位置與終點(diǎn)位置;

"Hi Master Yoda".substring(1,3) //"i "

substr方法:接受兩個(gè)參數(shù),即起始位置與字符串長(zhǎng)度;

"Hi Master Yoda".substr(1,3) //"i M"

這樣看起來slice和substring并沒有區(qū)別,實(shí)則不然,這個(gè)我們悶騷后討論,先來看看第一個(gè)變量起始位置這個(gè)概念,第一個(gè)參數(shù)三者都表示起始位置,需要注意的是:

如果不傳入?yún)?shù)(默認(rèn)值是0),則返回值為原字符串;

若傳入正數(shù),則返回從該索引處(包含該值)到字符串結(jié)尾的子字符串
如上例子

如果傳入負(fù)數(shù)slice,與substr效果相同都返回該索引至字符串終點(diǎn)的子字符串,substring會(huì)得到與傳入零一樣的效果

"May the Force be with you".slice(-10)  
//"e with you"

"May the Force be with you".substring(-10)   
//"May the Force be with you"

"May the Force be with you".substr(-10)   
//"e with you"

這樣你就不會(huì)再認(rèn)為slice和substring并沒有區(qū)別,其實(shí)他們?nèi)齻€(gè)間的差異還挺多的,不過不急咱們先來看看所謂的負(fù)索引,你也可以有自己的一套理解不過一下是我覺得比較容易記得住的方式:

結(jié)果返回?cái)?shù)值區(qū)間內(nèi)的字符串(ps:負(fù)零只是占位用,實(shí)際方法是不接受-0的只會(huì)得到和0一樣的結(jié)果):

對(duì)每個(gè)函數(shù)的負(fù)數(shù)參數(shù)做一下說明

slice

slice方法可接受兩個(gè)為負(fù)值的參數(shù):

"May the Force be with you".slice(-5,-1) //"aste"

但無論有幾個(gè)參數(shù)為負(fù)值,第一參數(shù)對(duì)應(yīng)字符所在位置必須在第二參數(shù)對(duì)應(yīng)字符所在位置的左邊,否則返回空字符串(即不能逆向):

"May the Force be with you".slice(-1,-5)
"May the Force be with you".slice(-1,1)
"May the Force be with you".slice(4,1)

以上均返回 ""

substring

substring方法對(duì)任何雙負(fù)數(shù)返回""

"May the Force be with you".substring(-1,-4)  //""

這里的任何至一切順序的雙負(fù)數(shù)都講返回"";

substring只返回?cái)?shù)值區(qū)間內(nèi)的字符串,沒有slice中的逆向問題

"May the Force be with you".substring(5,1)//"ay t"

一下返回相同結(jié)果 "May t"

"May the Force be with you".substring(-5,5)
"May the Force be with you".substring(5,-5)

這里可以理解成出現(xiàn)負(fù)數(shù)時(shí)會(huì)被自動(dòng)轉(zhuǎn)成0,該理解對(duì)雙負(fù)數(shù)同樣適用。具體標(biāo)準(zhǔn)請(qǐng)參考ecma文檔15.5.4.10

substring

從語意上理解第二參數(shù)不應(yīng)傳入負(fù)值,
所以只要第二參數(shù)為負(fù)值,不論第一參數(shù)是什么,均返回""

"May the Force be with you".substr(-5,-5)
"May the Force be with you".substr(0,-5)
"May the Force be with you".substr(5,-5)

總結(jié):

slice接受雙負(fù)數(shù);

substring不接受雙負(fù)數(shù)(返回""),單負(fù)數(shù)會(huì)轉(zhuǎn)換成0再解析;

subset不接受雙負(fù)數(shù)(返回""),單負(fù)數(shù)只能是第一個(gè)參數(shù),否則返回""

一些補(bǔ)充

當(dāng)輸入的索引數(shù)超出字符串長(zhǎng)度時(shí),會(huì)被解析為所能到達(dá)的最大值,長(zhǎng)度亦是如此:

"Master".slice(3,1024) //ter
"Master".substring(-1024,3)  //Mas
"Master".substr(3,1024)  //ter

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

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

相關(guān)文章

  • 淺談Vue.use

    摘要:并且接收的參數(shù)的限制是兩種類型。對(duì)于這兩種類型有不同的處理。之后給這個(gè)插件添加至已經(jīng)添加過的插件數(shù)組中,標(biāo)示已經(jīng)注冊(cè)過最后返回對(duì)象。還有一種則是將所有邏輯都編寫成一個(gè)函數(shù)暴露給。個(gè)人覺得第一種方式比較合理。 先舉個(gè)? 我們先來看一個(gè)簡(jiǎn)單的事例首先我使用官方腳手架新建一個(gè)項(xiàng)目vue init webpack vue-demo然后我創(chuàng)建兩個(gè)文件index.js plugins.js.我將這...

    MingjunYang 評(píng)論0 收藏0
  • js面向?qū)ο?em>淺談(三)

    摘要:還有一個(gè)問題,就是不能在創(chuàng)建子類性時(shí),像父類型的構(gòu)造函數(shù)傳遞參數(shù)。組合繼承將原型鏈和借用構(gòu)造函數(shù)組合到一起,發(fā)揮兩者之長(zhǎng)的一張繼承模式,下面來看個(gè)例子。組合繼承最大的問題是無論在什么情況下,都會(huì)調(diào)用兩次父類型構(gòu)造函數(shù)。 繼承 繼承是面向?qū)ο笳Z言中特別重要的概念,js的繼承主要是靠原型鏈實(shí)現(xiàn)的。 原型鏈?。。?看到我給標(biāo)題打了三個(gè)嘆號(hào)嗎,這里真的很重要!這里真的很重要!這里真的很重要!j...

    awkj 評(píng)論0 收藏0
  • 淺談ES6中基本數(shù)據(jù)類型操作方法

    摘要:值得注意的是,中整數(shù)和浮點(diǎn)數(shù)采用的是同樣的儲(chǔ)存方法位雙精度浮點(diǎn)數(shù),所以和被視為同一個(gè)值。 在Javascript中,數(shù)據(jù)類型分為基本數(shù)據(jù)類型和引用數(shù)據(jù)類型兩大類,其中,Array和Function在本質(zhì)上仍然是一種特殊的對(duì)象: 基本類型: String / Number / Boolean / Null / Undefined引用類型: Object / Array / Functio...

    longmon 評(píng)論0 收藏0
  • 淺談JavaScript事件

    摘要:淺談事件事件流的事件流有提出的捕獲流的冒泡流以及級(jí)事件流。真實(shí)的過程取決于事件的目標(biāo)元素以及各目標(biāo)元素的祖先元素是否有事件處理函數(shù)。事件處理函數(shù)需要注意的指的是或后面討論。兩種方法都會(huì)給事件處理函數(shù)傳一個(gè)事件對(duì)象作為參數(shù)。 淺談JavaScript事件 事件流 JavaScript的事件流有:Netscape提出的捕獲流、IE的冒泡流以及DOM2級(jí)事件流。這里只討論DOM2級(jí)事件流。 ...

    IamDLY 評(píng)論0 收藏0
  • 淺談CDN、SEO、XSS、CSRF

    摘要:要錢的簡(jiǎn)單理解百度的廣告就是不用錢的自己配置提高搜索引擎的權(quán)重是一種技術(shù),主要是用于提高網(wǎng)站瀏覽量而做的優(yōu)化手段為什么需要我們搜一下微信公眾號(hào)發(fā)現(xiàn)排名是有先后的,博客園都是靠前的。 CDN 什么是CDN 初學(xué)Web開發(fā)的時(shí)候,多多少少都會(huì)聽過這個(gè)名詞->CDN。 CDN在我沒接觸之前,它給我的印象是用來優(yōu)化網(wǎng)絡(luò)請(qǐng)求的,我第一次用到CDN的時(shí)候是在找JS文件時(shí)。當(dāng)時(shí)找不到相對(duì)應(yīng)的JS文件...

    asoren 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<