相同之處:
1、三個方法都是對字符串的截取操作每界,返回被操作的字符串捅僵,不會修改字符串本身;
2眨层、都接受一或兩個參數(shù)庙楚,第一個參數(shù)都為開始的位置;
3趴樱、只有一個參數(shù)且為正數(shù)的情況下返回的結(jié)果相同馒闷;
var str = "12345678";
console.log(str.slice(3)); // "45678"
console.log(str.substring(3)); // "45678"
console.log(str.substr(3)); // "45678"
不同之處
- 第二個參數(shù)含義不同
slice()和substring()第二個參數(shù)含義都為指定字符串最后一個字符后面的位置,
而substr()第二個參數(shù)含義為返回的字符數(shù)量
var str = "12345678";
console.log(str.slice(3,4)); // "4"
console.log(str.substring(3,4)); // "4"
console.log(str.substr(3,4)); // "4567"
- 參數(shù)為負(fù)數(shù)
slice()會把負(fù)數(shù)與字符串長度相加
var str = "12345678";
console.log(str.slice(-3)); // 相當(dāng)于 scice(5) => "678"
console.log(str.slice(-3,7)); // 相當(dāng)于 scice(5,7) => "67"
console.log(str.slice(3,-3)); // 相當(dāng)于 scice(3,5) => "45"
console.log(str.slice(-5,-3)); // 相當(dāng)于 scice(3,5) => "45"
substring()會把負(fù)數(shù)轉(zhuǎn)換為0
var str = "12345678";
console.log(str.substring(-3)); // 相當(dāng)于 substring(0) => "12345678"
console.log(str.substring(-3,7)); // 相當(dāng)于 substring(0,7) => "1234567"
console.log(str.substring(-5,-3)); // 相當(dāng)于 substring(0,0) => ""
substr()第一個參數(shù)為負(fù)數(shù)會把負(fù)數(shù)與字符串長度相加和slice()相同叁征,第二個參數(shù)為負(fù)數(shù)返回空字符串
var str = "12345678";
console.log(str.substr(-3)); // 相當(dāng)于 substr(5) => 678
console.log(str.substr(5,-3)); // 相當(dāng)于 substr(5,0) => ""
- 兩個參數(shù)位置顛倒
意思為將較大的數(shù)作為開始位置纳账,而將較小的數(shù)作為結(jié)束位置,
這個不同點(diǎn)只在slice()和substring()才存在捺疼,
substr()只有一個參數(shù)表示位置疏虫,還有一個表示長度,所以不存在這個問題
slice()會返回空字符串
var str = "12345678";
console.log(str.slice(5,3)); // ""
console.log(str.slice(-3,3)); // 相當(dāng)于 scice(5,3) => ""
console.log(str.slice(7,-3)); // 相當(dāng)于 scice(7,5) => ""
substring()會調(diào)換兩個參數(shù)的位置
var str = "12345678";
console.log(str.substring(5,3)); // 相當(dāng)于 substring(3,5) => "45"
console.log(str.substring(-3,3)); // 相當(dāng)于 substring(0,3) => "123"
console.log(str.substring(7,-3)); // 相當(dāng)于 substring(7,0) => substring(0,7) => "1234567"
總結(jié)
slice()
有end時啤呼,start<= 字符 <end,
只有start時卧秘,start<= 字符
有負(fù)數(shù) ,從后向前數(shù)官扣,開始向后進(jìn)行截取
start的位置必須【在前】 end的位置必須【在后】
substring()
有end時翅敌,start<= 字符 <end,
只有start時,start<= 字符
有負(fù)數(shù) ,把負(fù)數(shù)置 0醇锚,小的數(shù)為start, 大的數(shù)為end哼御。