slice()
定義:接受一個(gè)或者兩個(gè)參數(shù),第一個(gè)參數(shù)指定子字符串的開(kāi)始位置。第二個(gè)參數(shù)表示子字符串的結(jié)束位置(不包括結(jié)束位置的那個(gè)字符),如果沒(méi)有傳遞第二個(gè)參數(shù),則將字符串的長(zhǎng)度作為結(jié)束位置。
1、傳遞參數(shù)為正值情況:
var str ="helloWorld";// 一個(gè)參數(shù),則將字符串長(zhǎng)度作為結(jié)束位置alert(str.slice(3)); // "loWorld"// 兩個(gè)參數(shù),7位置上的字符為"r",但不包括結(jié)束位置的字符alert(str.slice(3,7)); // "loWo"
2、傳遞參數(shù)為負(fù)值的情況:
slice()方法會(huì)將傳入的負(fù)值與字符串長(zhǎng)度相加。
var str ="helloWorld";// 一個(gè)參數(shù),與字符串長(zhǎng)度相加即為slice(7)alert(str.slice(-3)); // "rld"// 兩個(gè)參數(shù),與字符串長(zhǎng)度相加即為slice(3,6)alert(str.slice(3,-4)); // "loW"
3、第二個(gè)參數(shù)比第一個(gè)參數(shù)值小的情況:
slice()方法傳入的第二個(gè)參數(shù)比第一個(gè)參數(shù)小的話(huà),則返回空字符串。
var str ="helloWorld";alert(str.slice(5,3)); // ""
4、IE兼容性
在IE8瀏覽器測(cè)試下,沒(méi)啥問(wèn)題,行為與現(xiàn)代瀏覽器一致。
substring()
定義:接受一個(gè)或者兩個(gè)參數(shù),第一個(gè)參數(shù)指定子字符串的開(kāi)始位置。第二個(gè)參數(shù)表示子字符串的結(jié)束位置(不包括結(jié)束位置的那個(gè)字符),如果沒(méi)有傳遞第二個(gè)參數(shù),則將字符串的長(zhǎng)度作為結(jié)束位置。
1、傳遞參數(shù)為正值情況:與slice()方法行為相同的
var str ="helloWorld";// 一個(gè)參數(shù),則將字符串長(zhǎng)度作為結(jié)束位置alert(str.substring(3)); // "loWorld"// 兩個(gè)參數(shù),7位置上的字符為"r",但不包括結(jié)束位置的字符alert(str.substring(3,7)); // "loWo"
2、傳遞參數(shù)為負(fù)值的情況:
substring()方法會(huì)把所有負(fù)值參數(shù)轉(zhuǎn)換為0。來(lái)看下例子:var str ="helloWorld";// 兩個(gè)參數(shù),-4會(huì)轉(zhuǎn)換為0,相當(dāng)于substring(3,0) -->即為 substring(0,3)alert(str.substring(3,-4)); // "hel"
substring()方法會(huì)將較小的數(shù)作為開(kāi)始位置,將較大的數(shù)作為結(jié)束位置。如上面的例子substring(3,0) 與substring(0,3)是一樣效果的。
4、IE兼容性
在IE8瀏覽器測(cè)試下,沒(méi)啥問(wèn)題,行為與現(xiàn)代瀏覽器一致。
substr()
定義:接受一個(gè)或者兩個(gè)參數(shù),第一個(gè)參數(shù)指定子字符串的開(kāi)始位置。第二個(gè)參數(shù)跟之前的方法有些區(qū)別,表示返回的字符個(gè)數(shù)。如果沒(méi)有傳遞第二個(gè)參數(shù),則將字符串的長(zhǎng)度作為結(jié)束位置。來(lái)看例子:
1、傳遞參數(shù)為正值情況:
var str ="helloWorld";// 一個(gè)參數(shù),則將字符串長(zhǎng)度作為結(jié)束位置alert(str.substr(3)); // "loWorld"// 兩個(gè)參數(shù),從位置3開(kāi)始截取后面7個(gè)字符alert(str.substr(3,7)); // "loWorld"
2、傳遞參數(shù)為負(fù)值的情況:
substr()方法會(huì)將負(fù)的第一個(gè)參數(shù)加上字符串的長(zhǎng)度,而將負(fù)的第二個(gè)參數(shù)轉(zhuǎn)換為0。
var str ="helloWorld";// 將第一個(gè)負(fù)的參數(shù)加上字符串的長(zhǎng)度--->//即為:substr(7,5) ,從位置7開(kāi)始向后截取5個(gè)字符alert(str.substr(-3,5)); // "rld"// 將第二個(gè)參數(shù)轉(zhuǎn)換為0// 即為:substr(3,0),即從位置3截取0個(gè)字符串,則返回空alert(str.substr(3,-2)); // ""
3、IE兼容性
substr()方法傳遞負(fù)值的情況下會(huì)存在問(wèn)題,會(huì)返回原始的字符串。IE9修復(fù)了此問(wèn)題。
總結(jié)
在傳遞正值參數(shù)情況下,slice() 和 substring () 行為是一致的,substr()方法在第二個(gè)參數(shù)上會(huì)容易混淆
在傳遞負(fù)值參數(shù)情況下,slice() 方法是通過(guò)字符串長(zhǎng)度相加,符合一般思維,substring()第二個(gè)參數(shù)轉(zhuǎn)換為0會(huì)容易出問(wèn)題,起始位置會(huì)容易變更,
substr() 方法負(fù)值情況下會(huì)出現(xiàn)IE兼容性問(wèn)題。
綜上,小弟一般推薦使用slice()方法。















