天天看點

JavaScript字元串“三劍客”本文重點總結:

JavaScript字元串方法有很多,其中有三個方法與字元串裁剪有關,他們分别是slice()、substring()和substr(),我把他們統稱為“三劍客”。

由于他們都是用于裁剪字元串,很容易混淆,是以接下來我将結合具體執行個體來講講他們的共同點和差別。

一、共同點

① 接受一個或兩個參數,其中第一個參數為裁剪的開始位置

② 都會傳回被裁剪下來的子字元串,而原字元串不受影響

③ 若不傳第二個參數,則從開始位置(第一個參數)一直截取到字元串結尾。

var str = '微信公衆号:前端微站';
var str1 = str.slice(2);  
console.log(str1);    // "公衆号:前端微站"
str1 = str.substring(2);
console.log(str1);   // "公衆号:前端微站"
str1 = str.substr(2);
console.log(str1);   // "公衆号:前端微站"
console.log(str);   // "微信公衆号:前端微站"
           

可以看出,當隻傳入一個參數時,這三個方法的用法和作用都是一緻的,都是将“公”字(索引值為2)一直到字元串末尾的字元串裁剪下來并傳回,并且都不會影響到原字元串。

二、差別

① slice()和substring()的第二個參數均表示的是裁剪的結束位置(但不包括該項,這與數組中的slice()方法類似),而substr()的第二個參數則表示的是裁剪下來字元串長度

② 當傳入的參數為負值時,slice()會将所有負參數與字元串的長度相加,substring()會把所有負參數都轉換為0,而substr()就相對比較複雜了,它會将第一個負參數加上字元串長度,第二個參數轉換為0

1. 參數均為正數

var str = '微信公衆号:前端微站';
var str1 = str.slice(2,5);
console.log(str1);    // "公衆号"
str1 = str.substring(2,5);
console.log(str1);    // "公衆号"
str1 = str.substr(2,3);
console.log(str1);    // "公衆号"
           

很明顯,slice()和substring()用法一緻,兩個參數分别都表示的是起始位置2和結束位置5,不包含結束位置5所在字元(“:”),而substr()第二個參數表示的是要裁剪下來的字元串長度,執行個體中是裁剪3個字元。

2. 參數存在負數

var str = '微信公衆号:前端微站';
console.log(str.length);   // 10
var str1 = str.slice(-4);   //  相當于str.slice(6)
console.log(str1);   //  "前端微站"
str1 = str.substring(-4);   //  相當于str.substring(0)
console.log(str1);   //  "微信公衆号:前端微站"
str1 = str.substr(-4);   //  相當于str.substr(6)
console.log(str1);   //  "前端微站"

var str2 = str.slice(2,-4);   //  相當于str.slice(2,6)
console.log(str2);   //  "公衆号:"
str2 = str.substring(2,-4);   //  相當于str.substring(2,0),也就是str.substring(0,2)
console.log(str2);   //  "微信"
str2 = str.substr(2,-4);   //  相當于str.substr(2,0)
console.log(str2);   //  ""

var str3 = str.slice(-2,-4);   //  相當于str.slice(8,6)
console.log(str3);    // ""
str3 = str.substring(-2,-4);   //  相當于str.substring(0,0)
console.log(str3);   // ""
str3 = str.substr(-2,-4);   //  相當于str.substr(8,0)
console.log(str3);   // ""

var str4 = str.slice(-4,-2);   //  相當于str.slice(6,8)
console.log(str4);   // "前端"
str4 = str.substring(-4,-2);  //  相當于str.substring(0,0)
console.log(str4);  // ""
str4 = str.substr(-4,-2);  //  相當于str.substr(6,0)
console.log(str4);  // ""
           

當參數為負數時,隻需牢記,slice見負加總長,substring見負則歸零,substr一加總長一歸零。 另外還需要特别注意的一點是,slice()第一個參數須小于第二個參數才能正常截取字元串,否則傳回的是空字元串,而substring()則沒有這個問題。

本文重點總結:

① substr()第二個參數是裁剪長度,隻要為負,裁剪結果必定是空字元串

② 不管如何裁剪,均不影響原字元串

③ 當參數為負,slice加總長,substring則歸零,substr一加總長一歸零。

繼續閱讀