1

关于我的代码行为的一个快速问题:我只是想删除 JavaScript 中字符串的第一个和最后一个字符。所以这就是我的代码的样子(它实际上按照它应该工作的方式工作):

var element = "<LightName>";
element = element.substring(1, element.length - 1);

但是为什么在使用 -1 时它也会删除最后一个字符?element.length 时的字符串长度理论上不应该仍然是 11(因为子字符串尚未执行)所以我告诉它从索引 1 开始长度为 10 的子字符串。

可能是一个非常令人困惑的问题,但也许有人可以稍微澄清一下......

4

7 回答 7

7

这个链接,子字符串方法签名是:

string.substring(from, to)

这意味着第二个参数不是子字符串的长度,而是结束位置。

于 2013-07-29T09:14:03.113 回答
2

.substring 具有开始位置和结束位置作为参数。.substr 具有偏移量和长度作为参数

例如:

var a = "abcdefghijklmnopqrstuvwxyz"
var s = a.substring(5, 11) // fghijk
var s2 = a.substr(5, 11) // fghijklmnop
于 2013-07-29T09:17:03.173 回答
1

子字符串的参数是:substring(FROM_INDEX, TO_INDEX)

索引从 0 开始,一直到length - 1

如果字符串的长度为 11 个字符,则字符串的索引从 0 开始,到 10 结束。

因此,如果字符串是"abcd",则您将获取从索引 1 到 4(长度)- 1 的子字符串,因此您得到"bcd"

在您的情况下(跳过括号):

var element = "<LightName>";
element = element.substring(1, element.length - 1);
于 2013-07-29T09:13:27.143 回答
1

好吧,您返回字符串中除第一个和最后一个字符之外的所有内容。由于您从 0 开始,因此如果从总长度中减去 1,您将得到正确的结果。

于 2013-07-29T09:14:08.337 回答
1
  .substring(first,second);

第一个参数是使用起始索引为 0 的起始位置。第二个参数是结束位置,但它是从第一个到第二个的排他的意思,但不包括第二个。

于 2013-07-29T09:24:31.627 回答
1

因为你的字符串的长度是 11。你的函数说,从索引 1 到索引 (11 - 1) 10 获取子字符串。但是,子字符串不包括最后一个索引。因此,您可以有效地获取从索引 1 到索引 9 的子字符串。

于 2013-07-29T09:19:41.120 回答
1

来自http://www.w3schools.com/jsref/jsref_substring.asp(我知道 w3 学校不是最好的引用地点,但它清楚地表明了这一点)

string.substring(from, to)

它不是“到”参数的长度,直到整条线运行后才改变

于 2013-07-29T09:15:26.590 回答