深入淺析JavaScript字串操作方法 slice、substr、substring及其IE相容性_javascript技巧

來源:互聯網
上載者:User

在截取字串時常常會用到substr()、substring()、slice()方法,有時混淆之間的用法,故總結下。

閱讀目錄
•slice()
•substring()
•substr()
•總結 

slice()

定義:接受一個或者兩個參數,第一個參數指定子字串的開始位置。第二個參數表示子字串的結束位置(不包括結束位置的那個字元),如果沒有傳遞第二個參數,則將字串的長度作為結束位置。

1、傳遞參數為正值情況:

var str ="helloWorld";// 一個參數,則將字串長度作為結束位置alert(str.slice(3)); // "loWorld"// 兩個參數,7位置上的字元為"r",但不包括結束位置的字元alert(str.slice(3,7)); // "loWo" 

2、傳遞參數為負值的情況:

slice()方法會將傳入的負值與字串長度相加。 var str ="helloWorld";// 一個參數,與字串長度相加即為slice(7)alert(str.slice(-3)); // "rld"// 兩個參數,與字串長度相加即為slice(3,6)alert(str.slice(3,-4)); // "loW" 

3、第二個參數比第一個參數值小的情況:

slice()方法傳入的第二個參數比第一個參數小的話,則返回Null 字元串。

var str ="helloWorld";alert(str.slice(5,3)); // "" 

4、IE相容性

在IE8瀏覽器測試下,沒啥問題,行為與現代瀏覽器一致。

substring()

定義:接受一個或者兩個參數,第一個參數指定子字串的開始位置。第二個參數表示子字串的結束位置(不包括結束位置的那個字元),如果沒有傳遞第二個參數,則將字串的長度作為結束位置。

1、傳遞參數為正值情況:與slice()方法行為相同的

var str ="helloWorld";// 一個參數,則將字串長度作為結束位置alert(str.substring(3)); // "loWorld"// 兩個參數,7位置上的字元為"r",但不包括結束位置的字元alert(str.substring(3,7)); // "loWo" 

2、傳遞參數為負值的情況:

substring()方法會把所有負值參數轉換為0。來看下例子:

var str ="helloWorld";// 兩個參數,-4會轉換為0,相當於substring(3,0) -->即為 substring(0,3)alert(str.substring(3,-4)); // "hel" 

substring()方法會將較小的數作為開始位置,將較大的數作為結束位置。如上面的例子substring(3,0) 與substring(0,3)是一樣效果的。

4、IE相容性

在IE8瀏覽器測試下,沒啥問題,行為與現代瀏覽器一致。

substr()

定義:接受一個或者兩個參數,第一個參數指定子字串的開始位置。第二個參數跟之前的方法有些區別,表示返回的字元個數。如果沒有傳遞第二個參數,則將字串的長度作為結束位置。來看例子:

1、傳遞參數為正值情況:

var str ="helloWorld";// 一個參數,則將字串長度作為結束位置alert(str.substr(3)); // "loWorld"// 兩個參數,從位置3開始截取後面7個字元alert(str.substr(3,7)); // "loWorld" 

2、傳遞參數為負值的情況:

substr()方法會將負的第一個參數加上字串的長度,而將負的第二個參數轉換為0。

var str ="helloWorld";// 將第一個負的參數加上字串的長度--->//即為:substr(7,5) ,從位置7開始向後截取5個字元alert(str.substr(-3,5)); // "rld"// 將第二個參數轉換為0// 即為:substr(3,0),即從位置3截取0個字串,則返回空alert(str.substr(3,-2)); // "" 

3、IE相容性

substr()方法傳遞負值的情況下會存在問題,會返回原始的字串。IE9修複了此問題。

總結

在傳遞正值參數情況下,slice() 和 substring () 行為是一致的,substr()方法在第二個參數上會容易混淆

在傳遞負值參數情況下,slice() 方法是通過字串長度相加,符合一般思維,substring()第二個參數轉換為0會容易出問題,起始位置會容易變更,substr() 方法負值情況下會出現IE相容性問題。

綜上,小弟一般推薦使用slice()方法。

下面給大家介紹slice,substr和substring的區別

首先,他們都接收兩個參數,slice和substring接收的是起始位置和結束位置(不包括結束位置),而substr接收的則是起始位置和所要返回的字串長度。直接看下面例子:

 var test = 'hello world';  alert(test.slice(,));    //o w  alert(test.substring(,));   //o w  alert(test.substr(,));   //o world 

這裡有個需要注意的地方就是:substring是以兩個參數中較小一個作為起始位置,較大的參數作為結束位置。

如:

alert(test.substring(7,4));   //o w 

接著,當接收的參數是負數時,slice會將它字串的長度與對應的負數相加,結果作為參數;substr則僅僅是將第一個參數與字串長度相加後的結果作為第一個參數;substring則乾脆將負參數都直接轉換為0。測試代碼如下:

var test = 'hello world';  alert(test.slice(-));   //rld  alert(test.substring(-));  //hello world  alert(test.substr(-));  //rld  alert(test.slice(,-));  //lo w  alert(test.substring(,-)); //hel  alert(test.substr(,-));  //Null 字元串 

 注意:IE對substr接收負值的處理有錯,它會返回原始字串。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.