一、參數含義上的區別。
第一個參數 | 第二個參數(可選) | |
slice() | 開始位置 | 需要返回的子字符串最后一個字符后面的位置 |
substr() | 開始位置 | 需要返回的字符個數 |
substring() | 開始位置 | 需要返回的子字符串最后一個字符后面的位置 |
例如:
var strValue = "javascript programing"; alert(strValue.slice(3)); //"ascript programing"
alert(strValue.substring(3)); //"ascript programing"
alert(strValue.substr(3)); //"ascript programing"
alert(strValue.slice(3,13)); //"ascript pr"
alert(strValue.substring(3,13)); //"ascript pr"
alert(strValue.substr(3,13)); //"ascript progr"
二、處理負值參數時的區別。
參數的含義不變,只不過參數為負值時,3個子字符串函數會對負值參數進行不同的處理。
第一個參數 | 第二個參數(可選) | 備注 | |
Slice() | 將負值與字符串的長度相加 | 將負值與字符串的長度相加 | |
Substr() | 將負值與字符串的長度相加 | 將負值變為0 | |
substring() | 將負值變為0 | 將負值變為0 | 負值處理后,該函數會將較 小的數作為開始位置,較大 的數作為結束位置 |
例如:
var strValue = "javascript programing"; alert(strValue.slice(-3)); => alert(strValue.slice(18)); //"ing"
alert(strValue.substring(-3)); => alert(strValue.substring(0)); //"javascript programing"
alert(strValue.substr(-3)); => alert(strValue.substr(18)); //"ing"
alert(strValue.slice(3,-13)); => alert(strValue.slice(3,8)); //"ascri"
alert(strValue.substring(3,-13)); => alert(strValue.substring(0,3)); //"jav"
alert(strValue.substr(3,-13)); => alert(strValue.substr(3,0)); //""