字串擷取 slice,substr,substring 的區別

長安城下翩翩少年發表於2020-10-29

一 只傳遞一個引數時候

let str = '0123456';
str.slice(5);  //'56'
str.substr(5); // '56'
str.substring(5); // '56'

str.slice(-2); // '56'
str.substr(-2); // '56'
str.substring(-2);//'0123456'

總結:當傳遞一個引數時候,slice 和 substr表現一致,都是取初始index,返回該index到末尾的字串。而substring 出現負數,會自動轉化為0

二 傳遞兩個引數時候

let str = '0123456';
str.slice(1,5); // '1234'
str.substr(1,5);// '12345'
str.substring(1,5);// '1234'

str.slice(1,-2); // '1234'  
str.substr(1,-2); // ''     -2會轉化為0,表示從index為1開始,後面取0個數
str.substring(1,-2); // '0' -2會轉化為0,並將初始值設為更小的一個值 (0,1)

總結:當傳兩個引數時候
1 str.slice(x,y)
擷取[x,y) 區間內的值,當存在負值,可通過反向逆推轉化成正數,比如上例中 -2 => 5 ,str.slice(1,-2) = str.slice(1,5);
注意,當轉化後,如果末尾值小於初始值,則 返回'',比如 str.slice(2,0)
即:slice 第一個引數為初始擷取位置為閉區間,第二個引數為擷取的末尾位置為開區間,當存在負數時,可通過位置轉化為正值,當 轉化之後 初始值大於末尾值的,則返回空

  1. str.substr(x,y)
    x為初始值,當為負數時可通過位置比較轉化為正數, y為擷取的長度。當y大於能夠擷取的長度時候,會擷取當前初始值到字串末尾的字串,即str.subStr(4,100) === str.substr(4);當y為0或者負數時,表示擷取位數為0,返回 ''

  2. str.substring(x,y)
    x,y中有負數的直接轉化為0,然後 以小的數為初始點,大的數為截止點,前閉後開

三 總結

slice,substr,substring 都不會改變原來字串,僅返回擷取的字串

相關文章