簡體   English   中英

Javascript if else語句具有多個或以下條件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM