JavaScript取子串方法slice,substr,substring對比表


在程序語言中,字符串可以說是最常用的一種類型,而在程序中對字符串的操作也是十分頻繁。當程序語言自帶多種字符串操作的方法時,用該語言編程程序時就有很多的便利性,提高開發的效率。但是當方法過多,甚至目的相似、參數雷同的時候,就容易造成迷惑難以選擇的窘境。

在JavaScript中就有這樣的情況出現,對於取字符串的子串的操作,JavaScript提供了三種不同的方法:slicesubstrsubstring。雖然在網上隨便搜索一下,就可以找到介紹三者區別的文章,但是每次使用的時候,依然會迷糊無從選擇。因此結合網上介紹的區別,在本文中將它們的異同之處羅列在表中,方便參照和區分。

測試字符串: "0123456789"
瀏覽器:Chrome Version 29.0.1547.76
操作系統:Mac OS X Version 10.8.5

 
 

  參數 方法
參數1 參數2 slice(begin[, end]) substr(start[, length]) substring(from[, to])
參數/結果 7   789 789 789
說明 只有參數1,省略參數2 參數1指定的坐標截取到字符串結尾
參數/結果 -3   789 789 0123456789
說明 參數1為負數 從字符串末尾開始計算位置* 視為0
參數/結果 21        
說明 參數1大於或等於字符串長度 視為字符串長度,即返回空字符串
參數/結果 “3.21″   3456789 3456789 3456789
說明 參數1為浮點數或只含數字的字符串 類似parseInt()將數值轉換成整形
參數/結果 NaN   0123456789 0123456789 0123456789
說明 參數1非為有效數值 非有效數值視為視為0
參數/結果 3 7 3456 3456789 3456
說明 既有參數1,又有參數2 參數1的位置截取到參數2的位置 參數1的位置截取長度參數2的字符 同slice()
參數/結果 7 3   789 3456
說明 參數1大於參數2 返回空字符串 參數1的位置截取長度參數2的字符 交換參數1參數2再進行截取
參數/結果 3 -3 3456   012
說明 參數2為負數 負數從字符末尾開始計算位置 視為長度0,返回空字符串 交換參數,負數視為0
參數/結果 3 21 3456789 3456789 3456789
說明 參數2大於或等於字符串長度 視為字符串長度,結果同省略參數2
參數/結果 3 NaN     012
說明 參數2非為有效數值 非有效數值視為0,返回空字符串 非有效數值視為0,因長度為0返回空字符串 非有效數值視為0,交換參數進行截取
參數/結果 -7 -3 3456    
說明 參數1參數2都為負數 從字符串末尾開始計算位置 長度為負數,返回空字符串 負數視為0,返回空字符串
參數/結果 -7 7 3456 3456789 0123456
說明 參數1為正數,參數2為負數 (自動套用上邊的規則,不解釋)

*從字符串末尾開始計算位置:-1 指字符串中最后一個字符,-2 指倒數第二個字符,以此類推;也可視為字符串長度與負數之和的位置,若結果小於0,則視為0。

 

從上述表格對比中不難看出,三個方法之間的主要區別如下:

  • 三個方法的參數1都代表子串開始位置,參數2在slice和substring中表示結束位置,而在substr中代表的則是子串長度;
  • 對於負數態度,當出現在參數1的位置時,slice和substr從末尾開始計算,而substring不支持末尾計數法直接視為0;當出現在參數2位置時,slice和substring的處理同參數1:前者從末尾開始計算,后者轉換成0,而substr則視負數長度為0返回空串;
  • 對於參數1小於參數2的情況,substring最大的不同在於它會交換兩個參數再截取子串,substr因第二參數表示的是長度因此並無異常,slice曽依然正常搜尋子串始末位置,若開始位置在結尾后邊則返回空串。

根據MDN對substr的描述,在IE下可能並不支持負數從末尾計算的方式。

References:
  1. String – JavaScript | MDN
  2. What is the difference between String.slice and String.substring in JavaScript? – Stack Overflow
  3. Slice vs Substr vs Substring vs [ ] Methods · jsPerf
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM