[英]Javascript if else 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那樣一遍又一遍地不擊中變量? 值得關注的是,此列表比擴展數量要大得多,並且說了很多之后就顯得很多不必要的代碼。
行ext == 'avi' || 'mpg' || 'mpeg' || 'mp4' || '3gp'
ext == 'avi' || 'mpg' || 'mpeg' || 'mp4' || '3gp'
如果您比較ext是avi
還是'mpg' || 'mpeg' || 'mp4' || '3gp'
任何一個,那么ext == 'avi' || 'mpg' || 'mpeg' || 'mp4' || '3gp'
將始終為true。 'mpg' || 'mpeg' || 'mp4' || '3gp'
'mpg' || 'mpeg' || 'mp4' || '3gp'
是真實的 。
==
運算符僅比較單個變量以供將來參考。
您可以使用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
}
“所以我的問題是為什么這行不通”
我可以想到的最短的語法實現您的概念是對每種條件使用正則表達式測試:
if (/^(avi|mpg|mpeg|mp4|3gp)$/.test(ext)) {
或者您可以使用數組:
if (['avi', 'mpg', 'mpeg', 'mp4', '3gp'].indexOf(ext) != -1) {
(假設您不擔心IE <= 8,或者正在使用填充程序 ,或者使用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;
}
if
條件始終是真實的, if
您是第一位。
如果您有很多值得檢查的價值觀,那么我會建議類似
var video = ['avi', 'mpg'];
var audio = ['mpg', 'mpeg'];
if($.inArray(ext, video)){
//video
} if($.inArray(ext, audio)){
//audio
} else {
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.