Javascript子串行为奇怪

时间:2011-06-14 13:15:17

标签: javascript substring

我创建了一个将24小时字符串(即“0800”或“2330”)转换成分钟的功能。有时字符串会丢弃前导零,所以我需要考虑到这一点。

它的工作原理但是我得到分钟组件我尝试得到字符串的最后两个字符,人们会认为是这样:

var timeString = "800"; //Can be "0800"
timeString.substring(timeString.length - 2, 2)

其中,如果你的字符串是“800”(前导零点掉落)那么它将等同于

timeString.substring(3 - 2, 2)

然而,这没有任何回报。如果我使用以下代码,我只会得到“00”(我正在寻找):

timeString.substring(timeString.length, 2)

对我来说,这段代码是错误的,但不管怎么说它都有效?

任何人都可以解释原因吗?我误解了这个功能是如何工作的吗?

4 个答案:

答案 0 :(得分:4)

substring方法中的第二个参数不是您希望它成为您想要的索引的字符数。所以现在你要从substring(3-2,2),索引2到索引2,它不会给你任何字符。

将其更改为:

timeString.substring(timeString.length-2, timeString.length)

答案 1 :(得分:1)

这里第二个参数是to字符的索引。 您正在寻找的是substr函数。

答案 2 :(得分:1)

所以你正在做的是,将索引2的文本转换为2,这显然是一个空字符串。你真的想在这里使用String.prototype.slice。它允许您使用负参数作为从结尾索引的方式(基本上是字符串长度 - 索引)。指定没有第二个参数将提取所有内容,直到字符串结束。

timeString.slice(-2)

答案 3 :(得分:0)

您将substring()函数与substr()函数混淆了。 substring()的第二个参数是子字符串的结束索引,而substr()的第二个参数是字符串的长度。

尝试用substr()代替substring() ...