我正在检测扩展,然后根据扩展采取措施。所以我的问题是,为什么这个工作似乎不合逻辑?
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是ext == 'avi' || 'mpg' || 'mpeg' || 'mp4' || '3gp'
或avi
中的任何一个是truthy,则在比较时,行'mpg' || 'mpeg' || 'mp4' || '3gp'
将始终为true。==
运算符仅比较单个变量以供将来参考。
用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
}