Javascript 为什么我的子字符串在这样写的时候起作用?

Javascript 为什么我的子字符串在这样写的时候起作用?,javascript,Javascript,关于我的代码的行为,有一个简单的问题:我只想删除JavaScript中字符串的第一个和最后一个字符。这就是我的代码看起来的样子(它实际上是按照预期的方式工作的): var元素=”; element=element.substring(1,element.length-1); 但是为什么在使用-1时也会删除最后一个字符呢?在element.length时,字符串的长度理论上不应该仍然是11(因为子字符串还没有执行),所以我告诉它从索引1开始,长度为10的子字符串 这可能是一个相当令人困惑的问题,

关于我的代码的行为,有一个简单的问题:我只想删除JavaScript中字符串的第一个和最后一个字符。这就是我的代码看起来的样子(它实际上是按照预期的方式工作的):

var元素=”;
element=element.substring(1,element.length-1);
但是为什么在使用-1时也会删除最后一个字符呢?在element.length时,字符串的长度理论上不应该仍然是11(因为子字符串还没有执行),所以我告诉它从索引1开始,长度为10的子字符串


这可能是一个相当令人困惑的问题,但也许有人可以澄清一点

子字符串的参数是:
子字符串(从索引到索引)

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

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

因此,如果字符串是
“abcd”
,则从索引1到4(长度)-1取一个子字符串,得到
“bcd”

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

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

子字符串的参数是:
子字符串(从索引到索引)

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

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

因此,如果字符串是
“abcd”
,则从索引1到4(长度)-1取一个子字符串,得到
“bcd”

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

var element = "<LightName>";
element = element.substring(1, element.length - 1);
var元素=”;
element=element.substring(1,element.length-1);
从中,子字符串方法签名为:

string.substring(from, to)
这意味着第二个参数不是子字符串的长度,而是结束位置。

从中,子字符串方法签名是:

string.substring(from, to)

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

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

那么您将返回字符串中除第一个和最后一个字符以外的所有字符。因为你从0开始,如果你从总长度中减去1,你将得到正确的结果。

from(我知道w3学校不是最好的引用地点,但它清楚地表明了这一点)

这不是“to”参数的长度,直到整行都从这里开始,它才改变(我知道w3学校不是最好引用的地方,但它清楚地表明了这一点)


它不是“to”参数的长度,在整行运行之前,该参数不会更改。子字符串的开始位置和结束位置作为参数。 .substr将偏移量和长度作为参数

例如:

var a = "abcdefghijklmnopqrstuvwxyz"
var s = a.substring(5, 11) // fghijk
var s2 = a.substr(5, 11) // fghijklmnop

.子字符串具有开始位置和结束位置作为参数。 .substr将偏移量和长度作为参数

例如:

var a = "abcdefghijklmnopqrstuvwxyz"
var s = a.substring(5, 11) // fghijk
var s2 = a.substr(5, 11) // fghijklmnop

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

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

  .substring(first,second);
第一个参数是起始位置,起始索引为0。 第二个参数是结束位置,但它是从第一个到第二个的排他性方法,但不包括第二个

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

哦,好吧,看来我误解了子串。如果这是正确的立场,那绝对有道理。非常感谢。OP的想法是@Jongware没错,因为我把它和PHP混合了起来+1因为我甚至不知道JS中也有一个等价的方法。哦,好吧,看起来我误解了子字符串。如果这是正确的立场,那绝对有道理。非常感谢。OP的想法是@Jongware没错,因为我把它和PHP混合了起来+1因为我甚至不知道JS中也有相同的方法。谢谢你的回复,但不是-2;)。我现在明白了,这是因为第二个参数不是长度,而是位置。很乐意帮忙。打字错误:)谢谢你的回复,但不是-2;)。我现在明白了,这是因为第二个参数不是长度,而是位置。很乐意帮忙。打字错误:)