在js中,須要常常處理字符串的問題,若是須要截取字符串的話,咱們會選擇slice、substr以及substring,下面就截取字符串的問題來細說一下。javascript
slice(start[,end])方法提取一個字符串的一部分,並返回一新的字符串。
start從該索引(以 0 爲基數)處開始提取原字符串中的字符。若是爲負數則爲strLength + start。
end可選。在該索引(以 0 爲基數)處結束提取字符串。若是省略該參數,slice會一直提取到字符串末尾。若爲負數則爲strLength + end。java
slice() 提取的新字符串包括start但不包括end。即[start, end)
若start和end相等,則返回一個空字符串。
若任一參數爲NaN,則被當爲0。
若start大於end,則返回空字符串jsp
var str = 'The morning is upon use'; str.slice(-3); // returns 'use' str.slice(-3, -1); // returns 'us'
substr(start[,length]) 方法返回一個字符串中從指定位置開始到指定字符數的字符,不改變原字符串
start開始提取字符的位置。若是爲負值,則被看做 strLength + start,其中 strLength 爲字符串的長度.
length可選,若是不設置,則提取字符直到字符串末尾測試
若是start爲正值,且大於或等於字符串的長度,則substr返回一個空字符串。此外若是length爲0或者負值也返回一個空字符串。若是start爲負值,且abs(start)大於字符串的長度,則substr使用0做爲開始提取的索引code
var str = "abcdefghij"; console.log("(-20, 2): " + str.substr(-20,2)); // (-20, 2): ab
substring(start[,end]) 方法返回一個字符串在開始索引到結束索引(或者末尾)之間的一個子集,不改變原字符串
start 一個 0 到字符串長度之間的整數。(非負數)
end 可選 一個 0 到字符串長度之間的整數。(非負數)索引
若start和end相等,則返回一個空字符串。
若任一參數小於0或爲NaN,則被當爲0
若任一參數大於str.length,則被看成 str.length
若indexStart大於indexEnd,則 substring 的執行效果就像兩個參數調換了同樣。例如,str.substring(1, 0) == str.substring(0, 1)。ip
var anyString = "Mozilla"; // 輸出 "Moz" console.log(anyString.substring(0,3)); console.log(anyString.substring(3,0)); console.log(anyString.substring(3,-3)); console.log(anyString.substring(3,NaN)); console.log(anyString.substring(-2,3)); console.log(anyString.substring(NaN,3));
此外對於三者的執行效率,網上有個對一個長度爲10000的字符串作截取測試,地址:[https://jsperf.com/slice-vs-s...
測試結果如圖所示字符串
文章首發於 [17biu.cn]get