之间有什么区别
alert("abc".substr(0,2));
和
alert("abc".substring(0,2));
他们似乎都输出“ab”。
之间有什么区别
alert("abc".substr(0,2));
和
alert("abc".substring(0,2));
他们似乎都输出“ab”。
不同之处在于第二个参数。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
正如 yatima2975 的回答所暗示的,还有一个额外的区别:
substr()
接受负的起始位置作为距字符串末尾的偏移量。 substring()
才不是。
来自MDN:
如果 start 为负数,则 substr() 将其用作从字符串末尾开始的字符索引。
所以总结一下功能上的区别:
substring(begin-offset, end-offset-exclusive)
其中开始偏移是0
或更大
substr(begin-offset, length)
其中开始偏移量也可能为负
主要区别在于
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"