2013-11-03 74 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 { 
}