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