字符串截取函數slice, substring, substr


  在日常項目需求中,常常會遇到需要截取字符串操作的工作,而ECMAScript為我們提供了原生的截取字符串的函數,而且提供了三個:slice, substring, substr。我們怎么判斷在什么時候使用哪個字符串截取函數呢?

  其實,只要搞清楚這三者的區別,就比較容易能夠判斷什么情況下,使用哪個字符串截取的函數了。

  三者都是接受兩個可選參數。

 

  最簡單的情況下,沒有傳入任何參數,則這三者沒有任何區別,類似於=操作符,直接復制了一個字符串出來。

  如果之傳入一個參數,則直接取從參數開始到字符串結尾的字符串。遇到非正整數的參數,與兩個參數的處理情況相同。

  str.slice(start, end)

  slice的參數start和end可接受任意非NaN數值的參數,取start到end之間的字符,不包含end。如果參數為負,則會自動加上str.length進行糾正,如果依然為負值,則修正為0。如果end值小於start則返回空字符串。

console.log("abcdefghij".slice(3,1))            //      ''
console.log("abcdefghij".slice(-3,-1))          //     'hi'
console.log("abcdefghij".slice(1, 3))           //     'bc'
console.log("abcdefghij".slice(-20, -8))        //     'ab'

 記住一個原則:如果end小於start,則返回空字符串。如果值為負數,加str.length糾正,依然為負,則調整為0。 

 

  str.substring(start, end)

  也是接受任意數值的參數,如果參數為0或者NaN的話,會自動修正為0;如果end小於start的話,兩者位置顛倒。取start到end之間的字符,不包含end。  

console.log("abcdefghij".substring(3,1))            //     'bc'
console.log("abcdefghij".substring(-3,-1))          //     ''
console.log("abcdefghij".substring(1, 3))           //     'bc'
console.log("abcdefghij".substring(-20, -8))     //   '' 

  也有一個原則:就是兩個參數當中較小的會自動調整當做start參數,任何非正整數,都會當做0處理。

 

  str.substr(start, length)

  從形參名稱應該可以看出一點不同。substr第一個參數也是起始位置,但是第二個參數不是結束位置,而是需要截取多少個字符串。

  start如果為負數,則與slice傳入負數參數一樣處理,讓其自身加str.length進行糾正,如果還小於0,則當做0處理。  

  length如果為0或者負數,則直接返回一個空字符串。  

console.log("abcdefghij".substr(-13))            //  'abcdefghij'
console.log("abcdefghij".substr(-13, 1))         //  'a'
console.log("abcdefghij".substr(0, -1))          //  ''
console.log("abcdefghij".substr(-1, 3))          //  'j'

  如此來看,就能夠比較清楚的分辨出來三者之間的用法和區別了。

 

  

  


免責聲明!

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



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