这个子串有什么问题?

时间:2011-03-02 00:56:29

标签: javascript

var mychars = 'abcdefghijklmnopqrstuvwxyz';
for (i = 0; i < mychars.length; i++) {
  alert(i.toString() + " - " + mychars.substring(i, 1));
}

首先为什么子串(1,1)不返回任何东西?为什么之后的所有内容都会打印多个字符?

5 个答案:

答案 0 :(得分:4)

javascript substring方法有两个参数:from和from indexss。从您的代码示例中看起来您的行为就像它(从,长度)一样。尝试将您的代码更改为以下

alert(i.toString() + " - " + mychars.substring(i, i + 1));

答案 1 :(得分:2)

@JaredPar和@Tim Cooper已经向你解释了发生了什么。我只想注意您应该使用接受fromlength参数的String.substr()方法。

答案 2 :(得分:1)

这完全出现在“substring()”的奇怪工作中。

当“i”为1时,你要求从位置1到位置1 - 1的所有字符,这根本就不是字符。

来自Mozilla文档:

  

如果indexA大于indexB,那么substring的效果就好像交换了两个参数一样;例如,str.substring(1,0)== str.substring(0,1)。

因此,对于大于1的“i”,您将获得“substring(1,i)”而不是“substring(i,1)”的效果。惊喜!

答案 3 :(得分:0)

有关子字符串函数的一些文档可以找到here

相关部分:

  

此方法提取中的字符   “from”和“to”之间的字符串,而不是   包括“到”本身。

答案 4 :(得分:0)

哇,我刚想通了。

第二个参数不是它将获得的字符数,而是字符的索引。

所以(0,1)从无到有'a',1,1从'b'到'b',意味着空的空间,(2,1)从'c'变为'b'等等类推。