Javascript string.length and string.lastIndexOf diff values
Javascript string.length and string.lastIndexOf diff values
为了简化我的问题,假设我有以下脚本:
var sPath = "/page/script/";
if (sPath.length != sPath.lastIndexOf("/"))
sPath = sPath + '/';
// do something else
为什么它没有进入条件?为什么它是一个差异值?
因为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/
您问题的直接解决方案是 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
相关文章:
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- 如何在MongoDB中将String转换为Array
- how to split a string with ','
- Protractor:element.getText()返回一个对象,而不是String
- 如何在不在本地下载的情况下将url中提供的文件(pdf/doc)转换为json/string/base64格式
- Javascript 如何强制 string.replace 不将我的字符串解释为正则表达式
- JavaScript警报适用于int,但不适用于string
- javascript/angularjs 将 String 与 number for loop 连接起来
- 如何在Android中将Javascript返回值转换为String
- 如何在javascript中对以下字符串使用string.split()
- Mocha js测试字符串不相等时不显示diff
- 如何在javascript中使用string.replace.将匹配字符串开头的两个不同表达式替换为null
- 使用JavaScript在Json中提取时,将数组的元素转换为String
- 是否存在将String转换为可执行的c++表达式的方法
- JavaScript - String.newProperty vs. String.prototype.newProp
- 如何将参数应用于String.prototype.format函数
- 在JavaFX的String中包含本地javascript源
- 如何在javascript中将String变量转换为int
- “*[attribute ^="string”是如何/为什么是有效的querySelector?(JS bug
- Javascript string.length and string.lastIndexOf diff values