为了简化我的问题,假设我有以下脚本:
var sPath = "/page/script/";
if (sPath.length != sPath.lastIndexOf("/"))
sPath = sPath + '/';
// do something else
为什么它没有进入有条件的?为什么它是一个差异值?
答案 0 :(得分:3)
因为sPath.length
是13
,但最后一个字符串是字符串(而lastIndexOf('/')
)是12th
,因为Javascript向量来自0
} n
。
例如,字符串“ABC”的长度为3
,但其位置为0
,1
和2
。
但是,这应该有效:
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