js字符串操作方法之slice、substr、substring 區(qū)別

ECMAScript提供了三個基于子字符串創(chuàng)建新字符串的方法: slice()、 substr()和substring()。

這三個方法都會返回被操作字符串的一個子字符串,而且也都接受一或兩個參數(shù)。
  • 第一個參數(shù)指定子字符串的開始位置,
  • 第二個參數(shù)(在指定的情況下)表示子字符串到哪里結(jié)束。具體來說, slice()和substring()的第二個參數(shù)指定的是子字符串最后一個字符后面的位置。而 substr()的第二個參數(shù)指定的則是返回的字符個數(shù)。

如果沒有給這些方法傳遞第二個參數(shù),則將字符串的長度作為結(jié)束位置。
slice()、 substr()和 substring()也不會修改字符串本身的值——它們只是返回一個基本類型的字符串值,對原始字符串沒有任何影響。

var stringValue = "hello world";
alert(stringValue.slice(3)); //"lo world"
alert(stringValue.substring(3)); //"lo world"
alert(stringValue.substr(3)); //"lo world"
alert(stringValue.slice(3, 7)); //"lo w"
alert(stringValue.substring(3,7)); //"lo w"
alert(stringValue.substr(3, 7)); //"lo worl"

在傳遞給這些方法的參數(shù)是負值的情況下,它們的行為就不盡相同了

其中, slice()方法會將傳入的負值與字符串的長度相加,
substr()方法將負的第一個參數(shù)加上字符串的長度,而將負的第二個參數(shù)轉(zhuǎn)換為 0。
substring()方法會把所有負值參數(shù)都轉(zhuǎn)換為 0。

var stringValue = "hello world";
alert(stringValue.slice(-3)); //"rld"
alert(stringValue.substring(-3)); //"hello world"
alert(stringValue.substr(-3)); //"rld"
alert(stringValue.slice(3, -4)); //"lo w"
alert(stringValue.substring(3, -4)); //"hel"
alert(stringValue.substr(3, -4)); //""(空字符串)
這個例子清晰地展示了上述三個方法之間的不同行為。
  • 在給 slice()和 substr()傳遞一個負值參數(shù)時,它們的行為相同。
    這是因為-3 會被轉(zhuǎn)換為 8(字符串長度加參數(shù) 11+(?3)=8)實際上相當于調(diào)用了 slice(8)和 substr(8)。但 substring()方法則返回了全部字符串,因為它將-3 轉(zhuǎn)換成了 0。

  • 當?shù)诙€參數(shù)是負值時,這三個方法的行為各不相同。
    slice()方法會把第二個參數(shù)轉(zhuǎn)換為 7,這就相當于調(diào)用了 slice(3,7),因此返回"lo w"。
    substring()方法會把第二個參數(shù)轉(zhuǎn)換為 0,使調(diào)用變成了 substring(3,0),而由于這個方法會將較小的數(shù)作為開始位置,將較大的數(shù)作為結(jié)束位置,因此最終相當于調(diào)用了 substring(0,3)。
    substr()也會將第二個參數(shù)轉(zhuǎn)換為 0,這也就意味著返回包含零個字符的字符串,也就是一個空字符串。



    參考資料:《javaScript高級程序設計第三版》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容