2013-11-03 102 views
0

我在檢測擴展,然後根據擴展名採取操作。所以我的問題是爲什麼不這樣做,似乎夠邏輯呃?Javascript if if statement with multiple or following condition

var ext = url.split('.').pop().toLowerCase(); 
if (ext == 'avi' || 'mpg' || 'mpeg' || 'mp4' || '3gp') { 
    This is a video (this always returns true...?) 
} else if (ext == 'jpg' || 'jpeg' || 'gif' || 'png' || 'bmp') { 
    This is a picture 
} else { 
    This extension isn't supported here 
} 

但這是嗎?不必要的開銷?

var ext = url.split('.').pop().toLowerCase(); 
if (ext == 'avi' || ext == 'mpg' || ext == 'mpeg' || ext == 'mp4') { 
    This is a video 
} else if (ext == 'jpg' || ext == 'jpeg' || ext == 'gif' || ext == 'png') { 
    This is a picture 
} else { 
    This extension isn't supported here 
} 

是否有語法問題,我的思念,使這項工作就像例子1沒有遍地打變量?值得關注的是,因爲這個列表比擴展的數量大很多,並且在完成所有的說明和完成時看起來像是大量不必要的代碼。

+0

'EXT =「JPG」 || 'jpeg'||'等同於'(ext =='jpg')|| 'jpeg'||'等 – nhgrif

+0

好問題.. – Hitesh

回答

3

ext == 'avi' || 'mpg' || 'mpeg' || 'mp4' || '3gp'爲您比較,如果ext是avi或者如果任何'mpg' || 'mpeg' || 'mp4' || '3gp'truthy將永遠是正確的。

==運算符僅比較一個變量以備將來參考。

你可以寫一個switch這種比較的另一種方法如下:

switch(ext) {//switch with fall throughs 
    case 'avi': 
    case 'mpg': 
    case 'mpeg': 
    case 'mp4': 
     //we got a video 
     break; 
    case 'jpg': 
    case 'jpeg': 
    case 'gif': 
    case 'png': 
     //its a picture 
     break; 
    default: 
     //this extension isn't suupported 
} 
+0

感謝您的澄清和替代方法的例子。 – d3c0y

+0

看起來很整潔:)回答很好!!! – Hitesh

1

「所以我的問題是,爲什麼不這項工作」

因爲這只是而不是|| operator做什麼。

我能想到的來實現你的概念最短的語法是使用正則表達式測試每個條件:

if (/^(avi|mpg|mpeg|mp4|3gp)$/.test(ext)) { 

或者你可以使用一個數組:

if (['avi', 'mpg', 'mpeg', 'mp4', '3gp'].indexOf(ext) != -1) { 

(假設你」再也不擔心IE < = 8,或正在使用a shim,或使用jQuery的$.inArray(),而不是.indexOf()。)

或者這似乎是一個明顯的地方使用switch聲明:

var ext = url.split('.').pop().toLowerCase(); 
switch(ext) { 
    case 'avi': 
    case 'mpg': 
    case 'mpeg': 
    case 'mp4': 
    case '3gp': 
     // This is a video (this always returns true...?) 
     break; 
    case 'jpg': 
    case 'jpeg': 
    case 'gif': 
    case 'png': 
    case 'bmp': 
     // This is a picture 
     break; 
    default: 
     // This extension isn't supported here 
     break; 
} 
1

你先if條件總是truthy。

如果你有很多值的檢查,然後我會建議像

var video = ['avi', 'mpg']; 
var audio = ['mpg', 'mpeg']; 
if($.inArray(ext, video)){ 
    //video 
} if($.inArray(ext, audio)){ 
    //audio 
} else { 
}