为了简化我的问题,假设我有以下脚本:
var sPath = "/page/script/";
if (sPath.length != sPath.lastIndexOf("/"))
sPath = sPath + '/';
// do something else
为什么它没有进入条件?为什么它是一个差异值?
为了简化我的问题,假设我有以下脚本:
var sPath = "/page/script/";
if (sPath.length != sPath.lastIndexOf("/"))
sPath = sPath + '/';
// do something else
为什么它没有进入条件?为什么它是一个差异值?
因为sPath.length
is 13
,但是 this 的最后一个字符是 string (并且lastIndexOf('/')
)是 the 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/
您的问题的直接解决方案是 xvatar 发布的内容。
但是,您可以使用正则表达式来检查最后一个字符是否为 ,而不是将长度与最后一个索引进行比较/
:
if(/\/$/.test(path)) {
...
}
恕我直言,这更明显更清晰。
另一件事,请考虑在if
语句周围使用大括号,即使它们是单行的。创建各种令人沮丧的错误非常容易。例如,如果您有:
if(somecondition)
dosomething();
然后有人过来并补充说:
if(somecondition)
dosomething();
dosomethingelse();
第二个函数调用不会被调用。当然,现在看起来很明显,但是在你最终找出问题所在之前,这可能会导致大量的头发拉扯。当您添加大括号时,它会使您的代码保持一致,并且您可以轻松分辨哪些代码属于if
. ,哪些不属于 。
它应该是if ((sPath.length - 1) != sPath.lastIndexOf("/"))
在几乎所有编程的默认上下文中,最大的索引是长度 - 1
减一!.length
不是从零开始的,(last)indexOf
是
所以最后一个字符的索引是.length - 1