关于javascript:substr和substring有什么区别?

What is the difference between substr and substring?

两者有什么区别

1
alert("abc".substr(0,2));

1
alert("abc".substring(0,2));

它们似乎都输出"ab"。


区别在于第二个论点。substring的第二个参数是要停止的索引(但不包括),但substr的第二个参数是要返回的最大长度。

链接?

https://developer.mozilla.org/en/javascript/reference/global_objects/string/substr

https://developer.mozilla.org/en/javascript/reference/global_objects/string/substring


substr(mdn)取参数为(from, length)substring(mdn)取参数为(from, to)

1
2
alert("abc".substr(1,2)); // returns"bc"
alert("abc".substring(1,2)); // returns"b"

您可以记住,substring采用索引,还有另一种字符串提取方法slice。

从0开始时,可以使用任一方法。


正如Yatima2975的回答中所暗示的,还有一个额外的区别:

substr()接受一个负的起始位置作为字符串末端的偏移量。substring()没有。

来自MDN:

If start is negative, substr() uses it as a character index from the
end of the string.

因此,总结功能差异:

substring(begin-offset, end-offset-exclusive),其中begin offset为0或更大

substr(begin-offset, length),其中开始偏移也可能为负。


我最近遇到的另一个问题是,在IE 8中,"abcd".substr(-1)错误地返回"abcd",而firefox 3.6则返回"d"slice在这两个方面都能正常工作。

关于这个主题的更多信息可以在这里找到。


主要区别在于

substr()允许您指定返回的最大长度

substring()允许您指定索引,第二个参数不包含在内。

SUBSTR()和SUBString()之间还有一些附加的微妙之处,例如处理相等参数和负参数。还要注意,substring()和slice()是相似的,但并不总是相同的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  //*** length vs indices:
   "string".substring(2,4);  //"ri"   (start, end) indices / second value is NOT inclusive
   "string".substr(2,4);     //"ring" (start, length) length is the maximum length to return
   "string".slice(2,4);      //"ri"   (start, end) indices / second value is NOT inclusive

  //*** watch out for substring swap:
   "string".substring(3,2);  //"r"    (swaps the larger and the smaller number)
   "string".substr(3,2);     //"in"
   "string".slice(3,2);      //""     (just returns"")

  //*** negative second argument:
   "string".substring(2,-4); //"st"   (converts negative numbers to 0, then swaps first and second position)
   "string".substr(2,-4);    //""
   "string".slice(2,-4);     //""

  //*** negative first argument:
   "string".substring(-3);   //"string"        
   "string".substr(-3);      //"ing"  (read from end of string)
   "string".slice(-3);       //"ing"

差异是第二个参数。他们的第二个参数,虽然这两个数字,却都期望两个不同的东西:

使用子字符串时,第二个参数是第一个不包括的索引:

1
2
3
4
5
var s ="string";
s.substring(1, 3); // would return 'tr'

var s ="another example";
s.substring(3, 7); // would return 'ther'

使用SUBSTR时,第二个参数是要包含在子字符串中的字符数:

1
2
3
4
5
var s ="string";
s.substr(1, 3); // would return 'tri'

var s ="another example";
s.substr(3, 7); // would return 'ther ex'


slice vs substr vs substring vs[]方法

这些javascript方法都有性能优势。请相应地使用这些功能。


子串():它有两个参数"开始"和"结束"。

  • start参数是必需的,并指定启动位置提取。
  • 结束参数是可选的,并指定提取应结束。

如果未指定结束参数,则提取从开始位置到字符串结束的所有字符。

1
2
3
4
5
var str ="Substring Example";
var result = str.substring(0, 10);
alert(result);

Output : Substring

如果start参数的值大于end参数的值,则此方法将交换这两个参数。这意味着开始将用作结束,结束将用作开始。

1
2
3
4
5
var str ="Substring Example";
var result = str.substring(10, 0);
alert(result);

Output : Substring

substr():它有两个参数"start"和"count"。

  • start参数是必需的,并指定启动位置提取。

  • count参数是可选的,指定提取液。

1
2
3
4
5
6
var str ="Substr Example";
var result = str.substr(0, 10);
alert(result);


Output : Substr Exa

如果未指定count参数,则提取从字符串开始位置到结束位置的所有字符。如果count为0或负数,则返回空字符串。

1
2
3
4
5
var str ="Substr Example";
var result = str.substr(11);
alert(result);

Output : ple


最大的区别是,substr()是一种被弃用的方法,仍然可以使用,但应该谨慎使用,因为它们预计在将来某个时候会被完全删除。您应该努力从代码中删除它们的使用。用substring()法成功地确定了前者。