相同點:
1、三個函數均可接受兩個參數,其中第二個參數可選。
2、只傳一個參數且參數爲正值時,三個函數返回值相同。
3、均不改變原字符串,返回新字符串。
不同點:
1、第一個參數指定字符串的開始位置,第二個參數:
(1)slice() 及 substring() 的第二個參數指定字符串的結束位置(不包括該指定字符)。
(2)substr() 的第二個參數指定子字符串的長度。
var string = "hello world";
alert(string.slice(3)); //"lo world"
alert(string.substring(3)); //"lo world"
alert(string.substr(3)); //"lo world"
alert(string.slice(3, 7)); //"lo w"
alert(string.substring(3, 7)); //"lo w"
alert(string.substr(3, 7)); //"lo worl"
(1)slice() 兩個參數均支持負數(將其值與字符串長度相加)。
(2)substr() 第一個參數支持負數,第二個參數會將負數轉換爲0。
(3)substring() 兩個參數均將負數轉換爲0。
var string = "hello world";
alert(string.slice(-3)); //"rld"
alert(string.substring(-3)); //"hello world"
alert(string.substr(-3)); //"rld"
alert(string.slice(3, -4)); //"lo w"
alert(string.substring(3, -4)); //"hel"
alert(string.substr(3, -4)); //""(第二個參數即字符串長度爲0)
3、對於 slice() 和 substring(),如果第二個參數小於第一個參數:
(1)slice() 將返回空字符串。
(2)substring() 將把小的那個值當做開始位置,大的值當做結束位置。
var string = "hello world";
string.slice(5, 2); //""
string.substring(5, 2); //"llo"