Can I ask what the difference is between string object slice()
and substr()
in JavaScript?

- 8,198
- 71
- 51
- 66

- 3,370
- 16
- 49
- 77
5 Answers
They have different signatures, .slice()
is:
string.slice(beginIndex, endIndex)
Whereas .substr()
is:
string.substr(beginIndex, length);
So for example, if we have "1234"
and wanted "23"
, it would be:
"1234".slice(1,3)
//or...
"1234".substr(1,2)
They also have different behavior for the more-rarely used negative indexes, look at the MDC documentation for .slice()
and .substr()
for full descriptions.

- 21,961
- 19
- 54
- 57

- 623,446
- 136
- 1,297
- 1,155
-
2Note that the "substr" method is not a part of ECMAScript standard and also can give inconsistent results in different browsers. Here is good summary: http://www.jacklmoore.com/notes/substring-substr-slice-javascript/ – C-F Jun 12 '13 at 02:54
String.slice(begin, end)
This method will cut text from
begin
toend
char, eg.:alert("Hello World!".slice(1, 8)); // ello Wo
String.substr(begin, length)
This method will cut text from
begin
tobegin
+length
char, eg.:alert("Hello World!".substr(1, 8)); // ello Wor

- 43,890
- 13
- 88
- 135
var str="Hello world!";
document.write(str.substring(3,7)+"<br />");
document.write(str.slice(3,7)+"<br />");
document.write(str.substr(3,7));
result:
lo w
lo w
lo worl

- 19,827
- 13
- 59
- 82

- 21
- 2
Substring()
1.If start equals stop, it returns an empty string. 2.If stop is omitted, it extracts characters to the end of the string. 3.If start > stop, then substring will swap those 2 arguments. 4.If either argument is greater than the string's length, either argument will use the string's length. 5.If either argument is less than 0 or is NaN, it is treated as if it were 0.
slice()
1.If start equals stop, it returns an empty string, exactly like substring(). 2.If stop is omitted, slice extracts chars to the end of the string, exactly like substring(). 3.If start > stop, slice() will NOT swap the 2 arguments. 4.If either argument is greater than the string's length, either argument will use the string's length, exactly like substring().

- 518
- 5
- 12
I think the difference between str.slice()
and str.substr()
is the second parameter:
.slice()
takes EndIndex while .substr()
takes length as in:
.slice(StartIndex,EndIndex)
and .substr(StartIndex,length).

- 119
- 1
- 6