0

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

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

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

4

4 回答 4

3

因为sPath.lengthis 13,但是 this 的最后一个字符是 string (并且lastIndexOf('/'))是 the 12th,因为 Javascript 向量从0n

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

但是,这应该有效:

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

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

于 2012-06-18T23:07:59.117 回答
2

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

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

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

恕我直言,这更明显更清晰。

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

if(somecondition) 
   dosomething();

然后有人过来并补充说:

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

第二个函数调用不会被调用。当然,现在看起来很明显,但是在你最终找出问题所在之前,这可能会导致大量的头发拉扯。当您添加大括号时,它会使您的代码保持一致,并且您可以轻松分辨哪些代码属于if. ,哪些不属于 。

于 2012-06-18T23:09:03.470 回答
1

它应该是if ((sPath.length - 1) != sPath.lastIndexOf("/"))

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

于 2012-06-18T23:07:32.950 回答
0

减一!.length不是从零开始的,(last)indexOf

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

于 2012-06-18T23:14:32.280 回答