substr和substring有什么区别?

有什么区别

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

 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)

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

你可以记得substring需要索引,还有另一个string提取方法slice 。

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

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

更多关于这个主题可以在这里find。

正如yatima2975的回答暗示的那样,还有一个不同之处:

substr()接受一个负的开始位置作为从string末尾的偏移量。 substring()不。

来自MDN :

如果start是负数,substr()将它用作string末尾的字符索引。

因此总结function差异:

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

substr(begin-offset, length)其中begin-offset也可以是负数

不同的是第二个参数。 他们的第二个参数,两个数字,都期待着两个不同的东西:

当使用子string时,第二个参数是第一个不包含的索引:

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

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

 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方法都有性能优势。 请相应地使用这些function。

主要区别在于

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

substring()允许你指定索引,第二个参数不是包含的

substr()和substring()之间还有一些额外的细节,比如处理相同的参数和消极的参数。 还要注意substring()和slice()是相似的,但并不总是相同的。

  length vs indices "string".substr(2,4); // "ring" (start, length) length is the maximum length to return "string".substring(2,4); // "ri" (start, end) indices / second value is NOT inclusive "string".slice(2,4); // "ri" (start, end) indices / second value is NOT inclusive watch out for substring swap "string".substr(3,2); // "in" "string".substring(3,2); // "r" (swaps the larger and the smaller number) "string".slice(3,2); // "" (just returns "") handling negative arguments "string".substr(2,-4); // "" "string".substring(2,-4); // "st" (converts negative numbers to 0, then swaps first and second position) "string".slice(2,-4); // "" 

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