slice,substring,substr三個函數都是截取字符串。javascript
先看方法的簽名java
slice(start, end); // 參數可爲負數。第二個參數是指定結束位置。 substring(start, end); // 參數爲負數被替換成0。交換參數位置,小的在前。第二個參數是指定結束位置。 substr(start, length); // 參數可爲負數。第二個參數是指定截取長度。
從簽名能夠看出 substr 和其餘兩個的差異,substr第二個參數指定截取的長度,slice和substirng第二個參數指定截取的結束位置, 例:函數
var s = 'helloworld'; a.substr(2, 5); // 'llowo' a.slice(2, 5); // 'llo' a.substring(2, 5) // 'llo'
slice和substring的差異在於slice的參數能夠是負數,而substring不行。code
slice中的start若是爲負數,會從尾部算起,-1表示倒數第一個,-2表示倒數第2個,此時end必須爲負數,而且是大於start的負數,不然返回空字符串。slice的end若是爲負數,一樣從尾部算起,若是其絕對值超過原字符串長度或者爲0,返回空字符串。ip
substring會取start和end中較小的值爲start,兩者相等返回空字符串,任何一個參數爲負數被替換爲0(即該值會成爲start參數)。字符串
// substring會取start和end中較小的值爲start s.substring(3, 2); // 'l' s.substring(2, 3); // 'l' // 兩者相等返回空字符串 s.substring(3,3); // '' // 任何一個參數爲負數被替換爲0, 至關於 s.substring(0, 2); s.substring(-1, 2); // 'he' // 至關於 s.substring(0, 0); s.substring(-1, -2); // ''
substr的參也能夠爲負數,當第一個參數爲負數時,會從尾部算起,-1表示倒數第一個,-2表示倒數第2個...。第二個爲負值是始終返回控制符串。string
s.substr(-2, 1); // 'l' s.substr(-2, 0); // '' s.substr(-2, -1); // '' // 第一個參數爲負數時,絕對值大於字符串長度時替換爲0 s.substr(-10, 2); // 'he'