substr和substring有什么区别?

JavaScript

Tony西门古一

2020-03-10

之间有什么区别

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

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

They both seem to output “ab”.

第471篇《substr和substring有什么区别?》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

8个回答
Pro神奇 2020.03.10

substring(): 它有2个参数“开始”和“结束”。

  • start参数是必需的,它指定开始提取的位置。
  • end参数是可选的,它指定提取应终止的位置。

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

var str = "Substring Example";
var result = str.substring(0, 10);
alert(result);

Output : Substring

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

var str = "Substring Example";
var result = str.substring(10, 0);
alert(result);

Output : Substring

substr():它有2个参数“ start”和“ count”。

  • start参数是必需的,它指定开始提取的位置。

  • count参数是可选的,它指定要提取的字符数。

var str = "Substr Example";
var result = str.substr(0, 10);
alert(result);


Output : Substr Exa

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

var str = "Substr Example";
var result = str.substr(11);
alert(result);

Output : ple

米亚凯 2020.03.10

Slice vs Substr vs Substring vs []方法

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

GreenGil 2020.03.10

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

神无Tom 2020.03.10

主要区别在于

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

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

substr()和substring()之间还有一些其他的细微之处,例如对相等参数和负参数的处理。还要注意substring()和slice()相似,但并不总是相同。

  //*** 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"        
西门神奇 2020.03.10

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

有关此主题的更多信息,请参见此处

Jim小卤蛋 2020.03.10

正如yatima2975的回答所暗示的,还有另外一个区别:

substr()接受一个负的起始位置作为与字符串末尾的偏移量。 substring()才不是。

MDN

如果start为负,则substr()将其用作字符串末尾的字符索引。

所以总结一下功能上的区别:

substring(begin-offset, end-offset-exclusive)起始偏移0量大于或等于

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

十三Mandy 2020.03.10

substrMDN)将参数设为(from, length)
substringMDN)将参数设为(from, to)

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

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

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

TomSam 2020.03.10

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

链接?

https://developer.mozilla.org/zh-CN/JavaScript/Reference/Global_Objects/String/substr

https://developer.mozilla.org/zh-CN/JavaScript/Reference/Global_Objects/String/substring

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android