和有什么区别
alert("abc".substr(0,2));
和
alert("abc".substring(0,2));
他们似乎都输出“ab”。
substring
最近在 Chrome 上的表现优于所有其他人(根据现已解散的 jsperf.com)。
slice
方法不同,substring
不处理负参数的调整。
substr
方法又有 substring
方法”?这真的是重载的首选方法吗?
substr()
可能被称为“伪弃用”的红色警告:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… - 是否有人对此有更多信息,例如是否有任何浏览器是否计划在未来的任何时候实际弃用 substr()
?或者正如 Steven Lu 所建议的那样,使用 substr()
会不会有性能劣势?
区别在于第二个论点。 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
(MDN) 将参数作为 (from, length)
。
substring
(MDN) 将参数作为 (from, to)
。
更新:MDN 考虑 substr
旧版。
alert("abc".substr(1,2)); // returns "bc"
alert("abc".substring(1,2)); // returns "b"
您可以记住 substring
(带有 i)需要 indices,另一种字符串提取方法 slice(带有我)。
从 0 开始时,您可以使用任何一种方法。
.substring()
采用索引。您可以记住,因为它是唯一一个名称中带有“i”的名称。 .slice()
也采用索引。
正如 yatima2975 的回答所暗示的,还有一个额外的区别:
substr()
接受一个负的起始位置作为从字符串结尾的偏移量。 substring()
没有。
从 MDN:
如果 start 为负数, substr() 将其用作字符串末尾的字符索引。
所以总结一下功能差异:
substring(begin-offset, end-offset-exclusive)
其中 begin-offset 为 0
或更大
substr(begin-offset, length)
其中 begin-offset 也可能为负数
主要区别在于
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"
我最近遇到的另一个问题是,在 IE 8 中,"abcd".substr(-1)
错误地返回 "abcd"
,而 Firefox 3.6 则按原样返回 "d"
。 slice
在两者上都能正常工作。
有关此主题的更多信息,请参阅 here。
最大的区别在于,substr()
是已弃用的方法,仍可使用,但应谨慎使用,因为预计它们将在未来某个时候完全删除。您应该努力从代码中删除它们的使用。 substring()
方法成功并指定了前者。
substr()
已弃用?我从几个人那里读过它,但我在网上找不到任何支持该声明的信息。此外,Mozilla 并未将其包含在已弃用/过时的功能列表中:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
String.prototype.substr()
在 ECMA-262 标准的 Annex B 中定义,其 introduction 声明:“......程序员在编写新的 ECMAScript 代码时不应使用或假设这些特性和行为的存在。......”
substr()
在某些文档中确实已被弃用。
区别在于第二个参数。他们的第二个参数,虽然都是数字,但期待两个不同的东西:
使用子字符串时,第二个参数是第一个不包含的索引:
var s = "string";
s.substring(1, 3); // would return 'tr'
var s = "another example";
s.substring(3, 7); // would return 'ther'
使用 substr 时,第二个参数是要包含在子字符串中的字符数:
var s = "string";
s.substr(1, 3); // would return 'tri'
var s = "another example";
s.substr(3, 7); // would return 'ther ex'
substring():它有 2 个参数“start”和“end”。
start 参数是必需的,它指定开始提取的位置。
end 参数是可选的,它指定提取应该结束的位置。
如果未指定 end 参数,则提取从开始位置到字符串结尾的所有字符。
var str = "子字符串示例"; var 结果 = str.substring(0, 10);警报(结果);输出:子字符串
如果 start 参数的值大于 end 参数的值,此方法将交换两个参数。这意味着开始将用作结束,结束将用作开始。
var str = "子字符串示例"; var 结果 = str.substring(10, 0);警报(结果);输出:子字符串
substr():它有 2 个参数“start”和“count”。
start 参数是必需的,它指定开始提取的位置。
count 参数是可选的,指定要提取的字符数。
var str = "子字符串示例"; var 结果 = str.substr(0, 10);警报(结果);输出:Substr Exa
如果不指定 count 参数,则提取从开始位置到字符串结尾的所有字符。如果 count 为 0 或负数,则返回一个空字符串。
var str = "子字符串示例"; var 结果 = str.substr(11);警报(结果);输出:ple
子字符串(startIndex,endIndex(不包括))
substr(startIndex, 多少个字符)
const string = 'JavaScript';
console.log('substring(1,2)', string.substring(1,2)); // a
console.log('substr(1,2)', string.substr(1,2)); // av
let str = "Hello World"
console.log(str.substring(1, 3)) // el -> Excludes the last index
console.log(str.substr(1, 3)) // ell -> Includes the last index
编辑:这个答案是参考 R 编程
以下是 substr() 和 substring() 之间的主要区别:
substr() 有参数 start 和 stop 而 substring 作为参数 first 和 last。 substr(x, 开始, 停止)
和
substring(text, first, last = 1000000L)
例子
substr("abcdef", start = 2, stop=4)
[1] "bcd"
substring("abcdef", first = 2, last = 4)
[1] "bcd"
substring 函数的 'last' 参数具有很大的默认值 [1000000L],因此您可以跳过指定,而 substr 函数需要您指定 stop 参数的值。
例子
substr("abcdef", start = 2)
Error in substr("abcdef", start = 2) :
argument "stop" is missing, with no default
substring("abcdef", first = 2)
[1] "bcdef"
如果您将 substr 函数应用于多个起点或终点,则该函数仅使用第一个条目(即终点 1),而 substring 函数将提取几个可能的字符串。
例子
> substr('abcdef', 1:3, 5)
[1] "abcde"
> substr('abcdef', 1:3, 5:6)
[1] "abcde"
> substr('abcdef', 1, 5:6)
[1] "abcde"
> substring('abcdef', 1:3, 5)
[1] "abcde" "bcde" "cde"
> substring('abcdef', 1, 5:6)
[1] "abcde" "abcdef"
> substring('abcdef', 1:3, 5:6)
[1] "abcde" "bcdef" "cde"
有人提到使用负索引/零。两者都被 substr() 和 substring() 接受。
例子
> substr('abcdef', -2, 3)
[1] "abc"
> substring('abcdef', -2, 3)
[1] "abc"
> substring('abcdef', 0, 3)
[1] "abc"
> substr('abcdef', 0, 3)
[1] "abc"
使用 substr() 或 substring() 进行字符串替换的重要说明:
替换需要与数据的替换部分具有相同数量的字符。如果你想用不同长度的字符串替换子字符串,你可以看看 gsub() 函数。
PS 我使用的是 R 版本 4.0.4
substr(-2)
将从字符串末尾的位置 -2 开始,返回最后两个字符。 substring
将所有负数 转换为零或字符串长度。因此 substring(-2)
将转换为 substring(0)
返回整个字符串。 MDN:Any argument value that is less than 0 or greater than stringName.length is treated as if it were 0 and stringName.length, respectively.
String.prototype.substr()
...(它在 ECMA-262 标准的 Annex B 中定义,其 introduction 声明:“...程序员在编写新的 ECMAScript 代码时,不应使用或假设存在这些特性和行为。...")substr
处理负起始值,而substring
不处理:"Hello".substr(-2); // return "lo"
"Hello".substring(-2); // return "Hello"