substr 和 substring 有什么区别?

IT技术 javascript substring
2021-01-27 18:05:40

之间有什么区别

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

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

他们似乎都输出“ab”。

6个回答

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

链接?

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substr

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/substring

substr处理负起始值,而substring不会:"Hello".substr(-2); // return "lo" "Hello".substring(-2); // return "Hello"
2021-03-15 18:05:40
您还应该提及第一个参数的差异,它对于 substr 可以是负数(在这种情况下它从末尾开始),但对于 substring 则不是。请参阅 JefferMC 的回答,但它的票数少得多,以至于很多人可能会错过这一重要部分。
2021-03-17 18:05:40
由于这是迄今为止最受欢迎的答案,因此可能应该对其进行编辑以包含 String.prototype.substr()已弃用的内容......(它在 ECMA-262 标准的附录 B定义,其介绍指出:“......程序员不应使用或假设在编写新的 ECMAScript 代码时存在这些特性和行为。...")
2021-03-17 18:05:40
听起来像是一个常见的错误来源。很高兴知道其中的区别。在此处找到有关此的其他评论:rapd.wordpress.com/2007/07/12/javascript-substr-vs-substring
2021-03-29 18:05:40
@Pawel 也当你想要它到字符串的末尾(没有第二个参数)
2021-04-10 18:05:40

substr( MDN ) 将参数作为(from, length).
substring( MDN ) 将参数作为(from, to).

更新:MDN 考虑substr遗留问题。

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

你还记得(与)需要ndices一样,另一个字符串的提取方法,SLCE(与)。substring

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

@colllin,关于 i 和索引的评论肯定应该移到答案中!
2021-03-22 18:05:40
.substring()需要指数。您可以记住,因为它是唯一一个名称中带有“i”的名称。 .slice()也需要指数。
2021-04-02 18:05:40

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

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

来自MDN

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

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

substring(begin-offset, end-offset-exclusive)其中开始偏移是0或更大

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

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

可以在此处找到有关此主题的更多信息

主要区别在于

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"        
您错过了以下有用的“否定第二个参数” slice"string".slice(2,-2); // "ri"
2021-03-23 18:05:40