具有多个或以下条件的Javascript if else语句

我正在检测扩展,然后根据扩展程序采取行动。 所以我的问题是为什么这不起作用,似乎合乎逻辑呃?

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'将永远是真的 '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条件总是真的if你首先。

如果你有很多值要检查,那么我会建议像

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

“所以我的问题是为什么这不起作用”

因为那不是什么|| 运营商呢 。

我能想到实现你的概念的最短语法是对每个条件使用正则表达式测试:

 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; }