JS提取字符串方法:substring、substr、slice的區別

這三個方法都是提取字符串裏面子串的方法,雖然平時使用挺多,但是每次都要去看文檔以防參數傳遞錯誤。下面對這三個方法做一個詳細的區別。

substring

String.substring(x,y):
x:必需。一個非負的整數,規定要提取的子串的第一個字符在 stringObject 中的位置。
y:可選。一個非負的整數,比要提取的子串的最後一個字符在 stringObject 中的位置+ 1

//2個參數的情況
"abcdefg".substring(1,4); //"bcd"

//1個參數的情況:返回開始位置到字符串的結尾
"abcdefg".substring(1); //"bcdefg"

//如果x=y:返回一個空串(即長度爲 0 的字符串)
"abcdefg".substring(1,1); //""

//如果x>y:先交換這兩個參數然後同第一種情況
"abcdefg".substring(4,1); //"bcd"

//如果x<0或y<0;會把小於0的參數當作0處理(理論上不接受負數);
"abcdefg".substring(1,-4); 
=》"abcdefg".substring(1,0); 
=》"abcdefg".substring(0,1); //"a"

slice

String.slice(x,y):
x:必需。要抽取的片斷的起始下標。如果是負數,則該參數規定的是從字符串的尾部開始算起的位置。也就是說,-1 指字符串的最後一個字符,-2 指倒數第二個字符,以此類推。
y:可選。要抽取的片段的結尾的下標+1。若未指定此參數,則要提取的子串包括 start 到原字符串結尾的字符串。如果該參數是負數,那麼它規定的是從字符串的尾部開始算起的位置。

//2個參數的情況
"abcdefg".slice(1,4); //"bcd"

//1個參數的情況:返回開始位置到字符串的結尾
"abcdefg".slice(1); //"bcdefg"

//如果x=y:返回一個空串(即長度爲 0 的字符串)
"abcdefg".slice(1,1); //""

//如果x>y:返回一個空串(即長度爲 0 的字符串)
"abcdefg".slice(4,1); //""

//如果x<0:從字符串的尾部開始算起的位置,-1 指字符串的最後一個字符,-2 指倒數第二個字符
//如果y<0:從字符串的尾部開始算起的位置,-1 指字符串的最後一個字符,-2 指倒數第二個字符
"abcdefg".slice(-1,8);//g
"abcdefg".slice(1,-4); //bc
*因爲slice不能像substring一樣當x<y的時候交換,所以必須y的位置在X之後,否則返回空串。

substr

String.substr(x,y):
x:必需。必需。要抽取的子串的起始下標。必須是數值。如果是負數,那麼該參數聲明從字符串的尾部開始算起的位置。也就是說,-1 指字符串中最後一個字符,-2 指倒數第二個字符,以此類推。
y:可選。子串中的字符長度。必須是數值。如果省略了該參數,那麼返回從 stringObject 的開始位置到結尾的字串。

//2個參數的情況
"abcdefg".substr(1,4); //"bcde"

//1個參數的情況:返回開始位置到字符串的結尾
"abcdefg".substr(1); //"bcdefg"

//如果x<0;從字符串的尾部開始算起的位置。-1 指字符串中最後一個字符,-2 指倒數第二個字符,以此類推。
"abcdefg".substr(-1);//g 
"abcdefg".substr(-1,1);//g
重要事項:ECMAscript 沒有對該方法進行標準化,因此反對使用它。

重要事項:在 IE 4 中,參數 start 的值無效。在這個 BUG 中,start 規定的是第 0 個字符的位置。在之後的版本中,此 BUG 已被修正。

總結

三個方法的第一個參數都是開始的位置,substring和slice的第二個參數是結束的位置(不包括該位置),slice和substr可以接受負值但是substr第二個參數是長度。

那麼問題來了,怎麼獲取一個字符串的最後一個字符呢?

"abcdefg".substring(length-1);//g 
"abcdefg".slice(-1);//g 
"abcdefg".substr(-1);//g
"abcdefg".charAt(length-1);//g 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章