2012-06-18 51 views
0

爲了簡化我的問題,比方說,我有以下腳本:的Javascript string.length減和string.lastIndexOf DIFF值

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

爲什麼它沒有進入的條件?爲什麼它是差價值?

+2

lastIndexOf是一個非常糟糕的方式來測試一個字符串的最後一個字符。按照Vivin的建議使用正則表達式,或者使用if(sPath.slice(-1)!=「/」)也可以。 – Neil

+0

確實不好,但我真正的問題是爲什麼他們不一樣,但謝謝你的建議! – Luis

+0

我明白了,這就是爲什麼我回答我希望的是有用的評論,而不是回答。 – Neil

回答

3

因爲sPath.length13,但這樣做的最後一個字符是字符串(和lastIndexOf('/') )是12th,因爲Javascript矢量從0變爲n

例如,字符串「ABC」的長度爲3,但其位置爲0,12

然而,這應該工作:

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

的jsfiddle例子:http://jsfiddle.net/zGyAa/

1

應該if ((sPath.length - 1) != sPath.lastIndexOf("/"))

在幾乎所有的編程默認情況下,最大的指數是長度 - 1

2

直接解決你的問題是什麼xvatar公佈。

但不是長度比較的最後一個索引,你可以使用正則表達式來檢查,如果最後一個字符是/

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

這一點更加明顯和清潔恕我直言。

另一件事,請考慮在你的if陳述中使用大括號,即使它們是單線。創建各種令人沮喪的錯誤非常容易。例如,如果您有:

if(somecondition) 
    dosomething(); 

這時,有人走來以後並補充說:

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

第二個函數調用將不會被調用。當然,現在看起來很明顯,但在最終發現問題出現之前,這可能會導致大量的頭髮拉動。當您添加大括號時,它會使您的代碼保持一致,您可以很容易地知道if內的代碼屬於哪些,哪些不符。

+0

這是一個更漂亮的解決方案,一個單一的支票,而不是兩個 –

+1

確實是一個很好的解決方案,但我真正的問題是爲什麼他們不一樣,即使是tho,+1也是這個優雅而快速的答案! – Luis

0

由一個! .length不是從零開始的,(last)indexOf

所以最後一個字符的索引是.length - 1