摘要:該方法會改變調(diào)用該方法的對象有返回值如的方法,會改變一個數(shù)組本身的順序,并且返回一個按要求排列的數(shù)組像的方法是不會改變原對象的方法是否是靜態(tài)的例如的方法都是靜態(tài)方法最后一點純屬個人惡趣味,我會把一些明顯不符合要求的值傳入,看看是否出現(xiàn)異常。
正文
每次遇到某個類型陌生的方法的時候,我通常會思考這樣幾個問題:
該方法需要的傳入?yún)?shù):
不需要傳參數(shù)的:諸如Array的pop方法;
有必傳參數(shù)?默認值是多少?例如前文所訴的parseInt方法;parseInt確實可以不傳,但是沒什么實際意義,會返回NaN;
但是某些方法如Number的toString方法,可接受一個參數(shù)即進制數(shù),不傳默認值是10。
該方法會改變調(diào)用該方法的對象?有返回值?
如Array的sort方法,會改變一個數(shù)組本身的順序,并且返回一個按要求排列的數(shù)組;
像Array的join方法是不會改變原對象的;
方法是否是靜態(tài)的:
例如Math的方法都是靜態(tài)方法
最后一點純屬個人惡趣味,我會把一些明顯不符合要求的值傳入,看看是否出現(xiàn)異常。
今天的故事從String的三個方法說起他們是slice,substring和subset(注意后面這兩貨都沒有一個大寫字母)
方法的日常為什么單單說這三個?因為它們長得像,用途也像屬于殊途同歸的方法(其實Array,String的一些方法真心讓人容易混長得像,用途迥異的如slice,splice,splite這三,以后找時間再說說他們仨的故事)
String的slice,substring和subsrt方法都能返回一個子字符串并且不改變原字符串,其中:
slice方法:接受兩個參數(shù),即起始位置與終點位置;
"Hi Master Yoda".slice(1,3) //"i "
substring方法:接受兩個參數(shù),即起始位置與終點位置;
"Hi Master Yoda".substring(1,3) //"i "
substr方法:接受兩個參數(shù),即起始位置與字符串長度;
"Hi Master Yoda".substr(1,3) //"i M"
這樣看起來slice和substring并沒有區(qū)別,實則不然,這個我們悶騷后討論,先來看看第一個變量起始位置這個概念,第一個參數(shù)三者都表示起始位置,需要注意的是:
如果不傳入?yún)?shù)(默認值是0),則返回值為原字符串;
若傳入正數(shù),則返回從該索引處(包含該值)到字符串結(jié)尾的子字符串
如上例子
如果傳入負數(shù)slice,與substr效果相同都返回該索引至字符串終點的子字符串,substring會得到與傳入零一樣的效果
"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"
這樣你就不會再認為slice和substring并沒有區(qū)別,其實他們?nèi)齻€間的差異還挺多的,不過不急咱們先來看看所謂的負索引,你也可以有自己的一套理解不過一下是我覺得比較容易記得住的方式:
結(jié)果返回數(shù)值區(qū)間內(nèi)的字符串(ps:負零只是占位用,實際方法是不接受-0的只會得到和0一樣的結(jié)果):
對每個函數(shù)的負數(shù)參數(shù)做一下說明
slice
slice方法可接受兩個為負值的參數(shù):
"May the Force be with you".slice(-5,-1) //"aste"
但無論有幾個參數(shù)為負值,第一參數(shù)對應(yīng)字符所在位置必須在第二參數(shù)對應(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方法對任何雙負數(shù)返回""
"May the Force be with you".substring(-1,-4) //""
這里的任何至一切順序的雙負數(shù)都講返回"";
substring只返回數(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)負數(shù)時會被自動轉(zhuǎn)成0,該理解對雙負數(shù)同樣適用。具體標(biāo)準(zhǔn)請參考ecma文檔15.5.4.10
substring
從語意上理解第二參數(shù)不應(yīng)傳入負值,
所以只要第二參數(shù)為負值,不論第一參數(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接受雙負數(shù);
substring不接受雙負數(shù)(返回""),單負數(shù)會轉(zhuǎn)換成0再解析;
subset不接受雙負數(shù)(返回""),單負數(shù)只能是第一個參數(shù),否則返回""
一些補充
當(dāng)輸入的索引數(shù)超出字符串長度時,會被解析為所能到達的最大值,長度亦是如此:
"Master".slice(3,1024) //ter "Master".substring(-1024,3) //Mas "Master".substr(3,1024) //ter
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/87778.html
摘要:并且接收的參數(shù)的限制是兩種類型。對于這兩種類型有不同的處理。之后給這個插件添加至已經(jīng)添加過的插件數(shù)組中,標(biāo)示已經(jīng)注冊過最后返回對象。還有一種則是將所有邏輯都編寫成一個函數(shù)暴露給。個人覺得第一種方式比較合理。 先舉個? 我們先來看一個簡單的事例首先我使用官方腳手架新建一個項目vue init webpack vue-demo然后我創(chuàng)建兩個文件index.js plugins.js.我將這...
摘要:還有一個問題,就是不能在創(chuàng)建子類性時,像父類型的構(gòu)造函數(shù)傳遞參數(shù)。組合繼承將原型鏈和借用構(gòu)造函數(shù)組合到一起,發(fā)揮兩者之長的一張繼承模式,下面來看個例子。組合繼承最大的問題是無論在什么情況下,都會調(diào)用兩次父類型構(gòu)造函數(shù)。 繼承 繼承是面向?qū)ο笳Z言中特別重要的概念,js的繼承主要是靠原型鏈實現(xiàn)的。 原型鏈?。?! 看到我給標(biāo)題打了三個嘆號嗎,這里真的很重要!這里真的很重要!這里真的很重要!j...
摘要:值得注意的是,中整數(shù)和浮點數(shù)采用的是同樣的儲存方法位雙精度浮點數(shù),所以和被視為同一個值。 在Javascript中,數(shù)據(jù)類型分為基本數(shù)據(jù)類型和引用數(shù)據(jù)類型兩大類,其中,Array和Function在本質(zhì)上仍然是一種特殊的對象: 基本類型: String / Number / Boolean / Null / Undefined引用類型: Object / Array / Functio...
摘要:淺談事件事件流的事件流有提出的捕獲流的冒泡流以及級事件流。真實的過程取決于事件的目標(biāo)元素以及各目標(biāo)元素的祖先元素是否有事件處理函數(shù)。事件處理函數(shù)需要注意的指的是或后面討論。兩種方法都會給事件處理函數(shù)傳一個事件對象作為參數(shù)。 淺談JavaScript事件 事件流 JavaScript的事件流有:Netscape提出的捕獲流、IE的冒泡流以及DOM2級事件流。這里只討論DOM2級事件流。 ...
摘要:要錢的簡單理解百度的廣告就是不用錢的自己配置提高搜索引擎的權(quán)重是一種技術(shù),主要是用于提高網(wǎng)站瀏覽量而做的優(yōu)化手段為什么需要我們搜一下微信公眾號發(fā)現(xiàn)排名是有先后的,博客園都是靠前的。 CDN 什么是CDN 初學(xué)Web開發(fā)的時候,多多少少都會聽過這個名詞->CDN。 CDN在我沒接觸之前,它給我的印象是用來優(yōu)化網(wǎng)絡(luò)請求的,我第一次用到CDN的時候是在找JS文件時。當(dāng)時找不到相對應(yīng)的JS文件...
閱讀 3310·2021-10-12 10:12
閱讀 3237·2021-09-22 16:04
閱讀 3443·2019-08-30 15:54
閱讀 2757·2019-08-29 16:59
閱讀 3132·2019-08-29 16:08
閱讀 1012·2019-08-29 11:20
閱讀 3639·2019-08-28 18:08
閱讀 837·2019-08-26 13:43