Javascript string.length and string.lastIndexOf diff values

Javascript string.length and string.lastIndexOf diff values

本文关键字:string diff values lastIndexOf and length Javascript      更新时间:2023-09-26

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

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

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

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

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

但是,这应该有效:

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