常常會用到的截取字符串substr()、substring()、slice()方法詳解
slice()
定義:接受一個或者兩個參數(shù),第一個參數(shù)指定子字符串的開始位置。第二個參數(shù)表示子字符串的結(jié)束位置(不包括結(jié)束位置的那個字符),如果沒有傳遞第二個參數(shù),則將字符串的長度作為結(jié)束位置。
1、傳遞參數(shù)為正值情況:
var str ="helloWorld"; // 一個參數(shù),則將字符串長度作為結(jié)束位置 alert(str.slice(3)); // "loWorld" // 兩個參數(shù),7位置上的字符為"r",但不包括結(jié)束位置的字符 alert(str.slice(3,7)); // "loWo"
2、傳遞參數(shù)為負(fù)值的情況:
slice()方法會將傳入的負(fù)值與字符串長度相加。
var str ="helloWorld"; // 一個參數(shù),與字符串長度相加即為slice(7) alert(str.slice(-3)); // "rld" // 兩個參數(shù),與字符串長度相加即為slice(3,6) alert(str.slice(3,-4)); // "loW"
3、第二個參數(shù)比第一個參數(shù)值小的情況:
slice()方法傳入的第二個參數(shù)比第一個參數(shù)小的話,則返回空字符串。
var str ="helloWorld"; alert(str.slice(5,3)); // ""
4、IE兼容性
在IE8瀏覽器測試下,沒啥問題,行為與現(xiàn)代瀏覽器一致。
substring()
定義:接受一個或者兩個參數(shù),第一個參數(shù)指定子字符串的開始位置。第二個參數(shù)表示子字符串的結(jié)束位置(不包括結(jié)束位置的那個字符),如果沒有傳遞第二個參數(shù),則將字符串的長度作為結(jié)束位置。
1、傳遞參數(shù)為正值情況:與slice()方法行為相同的
var str ="helloWorld"; // 一個參數(shù),則將字符串長度作為結(jié)束位置 alert(str.substring(3)); // "loWorld" // 兩個參數(shù),7位置上的字符為"r",但不包括結(jié)束位置的字符 alert(str.substring(3,7)); // "loWo"
2、傳遞參數(shù)為負(fù)值的情況:
substring()方法會把所有負(fù)值參數(shù)轉(zhuǎn)換為0。來看下例子: var str ="helloWorld"; // 兩個參數(shù),-4會轉(zhuǎn)換為0,相當(dāng)于substring(3,0) -->即為 substring(0,3) alert(str.substring(3,-4)); // "hel"
substring()方法會將較小的數(shù)作為開始位置,將較大的數(shù)作為結(jié)束位置。如上面的例子substring(3,0) 與substring(0,3)是一樣效果的。
4、IE兼容性
在IE8瀏覽器測試下,沒啥問題,行為與現(xiàn)代瀏覽器一致。
substr()
定義:接受一個或者兩個參數(shù),第一個參數(shù)指定子字符串的開始位置。第二個參數(shù)跟之前的方法有些區(qū)別,表示返回的字符個數(shù)。如果沒有傳遞第二個參數(shù),則將字符串的長度作為結(jié)束位置。來看例子:
1、傳遞參數(shù)為正值情況:
var str ="helloWorld"; // 一個參數(shù),則將字符串長度作為結(jié)束位置 alert(str.substr(3)); // "loWorld" // 兩個參數(shù),從位置3開始截取后面7個字符 alert(str.substr(3,7)); // "loWorld"
2、傳遞參數(shù)為負(fù)值的情況:
substr()方法會將負(fù)的第一個參數(shù)加上字符串的長度,而將負(fù)的第二個參數(shù)轉(zhuǎn)換為0。
var str ="helloWorld"; // 將第一個負(fù)的參數(shù)加上字符串的長度---> //即為:substr(7,5) ,從位置7開始向后截取5個字符 alert(str.substr(-3,5)); // "rld" // 將第二個參數(shù)轉(zhuǎn)換為0 // 即為:substr(3,0),即從位置3截取0個字符串,則返回空 alert(str.substr(3,-2)); // ""
3、IE兼容性
substr()方法傳遞負(fù)值的情況下會存在問題,會返回原始的字符串。IE9修復(fù)了此問題。
總結(jié)
在傳遞正值參數(shù)情況下,slice() 和 substring () 行為是一致的,substr()方法在第二個參數(shù)上會容易混淆
在傳遞負(fù)值參數(shù)情況下,slice() 方法是通過字符串長度相加,符合一般思維,substring()第二個參數(shù)轉(zhuǎn)換為0會容易出問題,起始位置會容易變更,
substr() 方法負(fù)值情況下會出現(xiàn)IE兼容性問題。
綜上,小弟一般推薦使用slice()方法。
- javascript中substr,substring,slice.splice的區(qū)別說明
- javascript中String類的subString()方法和slice()方法
- js substr、substring和slice使用說明小記
- js字符串截取函數(shù)substr substring slice使用對比
- JavaScript截取字符串的Slice、Substring、Substr函數(shù)詳解和比較
- javascript中slice(),splice(),split(),substring(),substr()使用方法
- javascript中substring()、substr()、slice()的區(qū)別
相關(guān)文章
javascript對JSON數(shù)據(jù)排序的3個例子
這篇文章主要介紹了javascript對JSON數(shù)據(jù)排序的3個例子的相關(guān)資料2014-04-04JavaScript實現(xiàn)帶標(biāo)題的圖片輪播特效
這里給大家分享的是4屏帶標(biāo)題和文字描述的js圖片輪播代碼,完美兼容IE6。圖片滾動切換,鼠標(biāo)放到數(shù)字選項卡即可切換圖片。點擊圖片跳轉(zhuǎn)到指定頁面,有需要的小伙伴可以參考下。2015-05-05Bootstrap模態(tài)框(modal)垂直居中的實例代碼
這篇文章主要介紹了Bootstrap模態(tài)框(modal)垂直居中的實例代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-08-08javascript實現(xiàn)的像java、c#之類的sleep暫停的函數(shù)代碼
我們都知道java、c#、vb等語言都有sleep暫停的函數(shù),而JavaScript腳本沒有類似的功能。2010-03-03