爲了簡化我的問題,比方說,我有以下腳本:的Javascript string.length減和string.lastIndexOf DIFF值
var sPath = "/page/script/";
if (sPath.length != sPath.lastIndexOf("/"))
sPath = sPath + '/';
// do something else
爲什麼它沒有進入的條件?爲什麼它是差價值?
爲了簡化我的問題,比方說,我有以下腳本:的Javascript string.length減和string.lastIndexOf DIFF值
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/
應該if ((sPath.length - 1) != sPath.lastIndexOf("/"))
在幾乎所有的編程默認情況下,最大的指數是長度 - 1
直接解決你的問題是什麼xvatar公佈。
但不是長度比較的最後一個索引,你可以使用正則表達式來檢查,如果最後一個字符是/
:
if(/\/$/.test(path)) {
...
}
這一點更加明顯和清潔恕我直言。
另一件事,請考慮在你的if
陳述中使用大括號,即使它們是單線。創建各種令人沮喪的錯誤非常容易。例如,如果您有:
if(somecondition)
dosomething();
這時,有人走來以後並補充說:
if(somecondition)
dosomething();
dosomethingelse();
第二個函數調用將不會被調用。當然,現在看起來很明顯,但在最終發現問題出現之前,這可能會導致大量的頭髮拉動。當您添加大括號時,它會使您的代碼保持一致,您可以很容易地知道if
內的代碼屬於哪些,哪些不符。
這是一個更漂亮的解決方案,一個單一的支票,而不是兩個 –
確實是一個很好的解決方案,但我真正的問題是爲什麼他們不一樣,即使是tho,+1也是這個優雅而快速的答案! – Luis
由一個! .length
不是從零開始的,(last)indexOf
是
所以最後一個字符的索引是.length - 1
lastIndexOf是一個非常糟糕的方式來測試一個字符串的最後一個字符。按照Vivin的建議使用正則表達式,或者使用if(sPath.slice(-1)!=「/」)也可以。 – Neil
確實不好,但我真正的問題是爲什麼他們不一樣,但謝謝你的建議! – Luis
我明白了,這就是爲什麼我回答我希望的是有用的評論,而不是回答。 – Neil