Javascript string.length和string.lastIndexOf diff值

时间:2012-06-18 23:05:33

标签: javascript html

为了简化我的问题,假设我有以下脚本:

var sPath = "/page/script/";
if (sPath.length != sPath.lastIndexOf("/"))
    sPath = sPath + '/';
// do something else

为什么它没有进入有条件的?为什么它是一个差异值?

4 个答案:

答案 0 :(得分:3)

因为sPath.length13,但最后一个字符串是字符串(而lastIndexOf('/'))是12th,因为Javascript向量来自0 } n

例如,字符串“ABC”的长度为3,但其位置为012

但是,这应该有效:

var sPath = "/page/script/";
if ((sPath.length-1) != sPath.lastIndexOf("/"))
    sPath = sPath + '/';

JSFiddle示例:http://jsfiddle.net/zGyAa/

答案 1 :(得分:2)

您的问题的直接解决方案是xvatar发布的内容。

但是,不是将长度与最后一个索引进行比较,而是使用正则表达式来检查最后一个字符是否为/

if(/\/$/.test(path)) {
   ...
}

这是一个更明显和更清洁的恕我直言。

另外,请考虑在if语句周围使用大括号,即使它们是单行。创建各种令人沮丧的错误非常容易。例如,如果您有:

if(somecondition) 
   dosomething();

然后有人出现并添加:

if(somecondition) 
   dosomething();
   dosomethingelse();

不会调用第二个函数调用。当然,现在看起来很明显,但是在你最终发现问题之前,这会导致大量的毛发拉伤。当您添加大括号时,它会使您的代码保持一致,并且您可以轻松地告知if中的代码属于哪些代码,哪些代码属于代码。

答案 2 :(得分:1)

应为if ((sPath.length - 1) != sPath.lastIndexOf("/"))

在几乎所有编程的默认上下文中,最大的索引是长度 - 1

答案 3 :(得分:0)

关闭一个! .length不是基于零,(last)indexOf

所以最后一个字符的索引是.length - 1