寶寶心累,一直都沒怎么記得住slice、substring、substr這幾個,但是寶寶不能逃避,來吧,互相傷害。。。
不傳任何參數(shù)的情況下
str.slice()、str.substring()、str.substr()
三者相同,相當(dāng)于復(fù)制了一個一模一樣的str,返回。
這三個孩子特別好,都不對原字符串做修改,返回的都是復(fù)制過并修改過的字符串。
只傳一個參數(shù)
str.slice(1),str.substring(1),str.substr(1)
,三者相同:相當(dāng)于從位置1截取的最后。
- 傳入值>=0,&& 傳入值 <length,該返回啥返回啥;
- 傳入值>=length,無效,返回空字符串
- 傳入值num為負(fù)數(shù)的情況下(且負(fù)得不過分的時候),自動糾正為num+str.length,從num+str.length開始截取處理
- num+str.length任然為負(fù)數(shù)的時候,無效,返回原數(shù)組
傳入兩個參數(shù):
str.slice(start,end)
- 其中,start和end為非NaN;
- start,end如果為負(fù),自動加str.length修正,還為負(fù),則修正為0;
- end < start,返回空字符串;
in all,如果end小于start,則返回空字符串。如果值為負(fù)數(shù),加str.length糾正,依然為負(fù),則調(diào)整為0。
str.substring(start,end)
- 參數(shù)<=0或NaN,自動修正為0;
- end < start,則兩者顛倒過來(什么鬼啊,尼瑪);
in all,就是兩個參數(shù)當(dāng)中較小的會自動調(diào)整當(dāng)做start參數(shù),任何非正整數(shù),都會當(dāng)做0處理。
str.substr(start,length)
- 第一個參數(shù)為開始位置,第二個參數(shù)為截取長度;
- 如果start為負(fù),則+str.length糾正,還為負(fù),則糾正為0;
- 如果length 超了,則返回start開始之后的所有字符;
splice
忘掉前面的那三個,勇敢面對這個逆天的能截取、能替換、能插入。。。的splice,返回的是被remove掉的數(shù)組,而且還把元數(shù)組修改了,這種“不純”的函數(shù)吧,特別討人厭。
splice(start,[delete],[item1,item2,item3…])
so, 邊實(shí)驗邊總結(jié):
只有一個值start
這個時候delete為空,但是默認(rèn)的值卻是colors.length-start,也就是說,從start開始(colors[start]),后面的一律remove掉;start為負(fù),則從后往前數(shù),-2是刪掉最后兩個,-3是刪掉最后三個。。。
兩個值的時候
第一個是start,第二個是delete的個數(shù)。當(dāng)delete為0或是非整數(shù)(如remove5那一條語句當(dāng)中的“black”),此時不刪除任何元素。當(dāng)delete大于colors.length-start,則從start開始到最后都移除掉。
三個(以及以上)個值的時候
第一個是start、第二個是delete、之后的都是要添加的元素,視為被delete掉元素的替換者,從哪兒刪掉,在哪兒補(bǔ)上。還是看remove5那一條,splice(3,”black”,”pink”),結(jié)果卻只把pink加入了而原數(shù)組沒移除任何元素,所以我猜是“black”被視為了無效的delete,相當(dāng)于是沒刪除。
最后,寶寶困了。。Evernote要是有表情該有多好。。。