2013-10-07 136 views
0

我認爲這很明顯是我的代碼。比較運算符!==對0

爲什麼我的代碼返回一個完整的字符串,如果我使用!==運算符?我知道Javascript中的數組從索引0開始,在這裏我輸入整個文件名作爲參數,因此indexOf(".")將始終大於0。不,我沒有在這裏傳遞.htaccess文件。

function getFileExtension(i) { 

    // return the file extension (with no period) if it has one, otherwise false 
    if(i.indexOf(".") !== 0) { // 
     return i.slice(i.indexOf(".") + 1, i.length); 
    } else { 
     return false; 
    } 
} 

// here we go! Given a filename in a string (like 'test.jpg'), 

getFileExtension('pictureofmepdf'); return given string 
// both operand are same type and value 

但是,如果我改變比較討論,以

(i.indexOf(".") > 0) // logs false 

附:我問你是問,這是usvsth3m形式。

+0

如果i> 0,比明顯也不同(不等於)!==到零(0) –

+3

你的問題是什麼? – Pete

+2

你知道0可能是一個有效的索引吧?在javascript中的數組從0開始 – dbarnes

回答

2

indexOf()返回字符串的索引,所以它可以返回0,這將意味着子出現在0位置。如果沒有找到子字符串,則返回-1代替,所以改變你的if聲明以反映這一邏輯:

if(i.indexOf(".") >= 0) 

此外,你應該使用substring()從字符串中抽取子 - slice()是數組。

return i.substring(i.indexOf(".") + 1, i.length); 

不過,我認爲更好的方式來做到這一點是split()

var fileNameArray = i.split("."); // "foo.txt" --> ["foo" "txt"] 
if(fileNameArray.length >= 2) { 
    return fileNameArray[1]; 
} else { 
    return false; //maybe you want to return "" instead? 
} 
2

絃樂方法indexOf回報(如果公司成立),你搜索的字符串的第一個指標,並且要記住,索引可以爲零,那麼爲什麼你必須做一個嚴格的比較來檢查indexOf它是不是返回布爾錯誤

對於這種情況,我建議您使用lastIndexOf,因爲名爲something.min.js的文件將返回min.js作爲有效的擴展名和不可用。

1

好了,爲了簡化,我省略IndexOf返回指數這是typeof運算數,或-1,當沒有發現給定值沒有返回的情況下,布爾值FALSE。所以在比較-1到0的情況下,結果是真實的,這就是爲什麼我實際上給出了給定的字符串輸出,而不是false。那麼,MDN是我的書籤欄現在

var z = -1; 
console.log(z >= 0); // evaluates false because -1 < 0 
console.log(z !== 0); // evaluates true because -1 !== 0 
// also if z > 0 it is !== 0, but could be < 0 

所以接下來的代碼工作就像一個魅力。

function getFileExtension(i) { 

    // i will be a string, but it may not have a file extension. 
    // return the file extension (with no period) if it has one, otherwise false 
    if(i.indexOf(".") >= 0) { 
     return i.substring(i.indexOf(".") + 1, i.length); 
    } else { 
     return false; 
    } 
} 

getFileExtension('pictureofmepdf');