Javascript If Else Statement With Multiple Or Following Condition
Solution 1:
The line ext == 'avi' || 'mpg' || 'mpeg' || 'mp4' || '3gp' will always be true as you are comparing if ext is avi or if any of 'mpg' || 'mpeg' || 'mp4' || '3gp' are truthy.
The == operator only compares a single variable for future reference.
Another way you can write this comparison with a switch is as follows:
switch(ext) {//switch with fall throughscase'avi':
case'mpg':
case'mpeg':
case'mp4':
//we got a videobreak;
case'jpg':
case'jpeg':
case'gif':
case'png':
//its a picturebreak;
default:
//this extension isn't suupported
}
Solution 2:
You first if condition is always truthy.
If you have a lot of values to check then I would suggest something like
var video = ['avi', 'mpg'];
var audio = ['mpg', 'mpeg'];
if($.inArray(ext, video)){
//video
} if($.inArray(ext, audio)){
//audio
} else {
}
Solution 3:
"So my question is why doesn't this work"
Because that's just not what the || operator does.
The shortest syntax I can think of to implement your concept is to use a regex test for each condition:
if (/^(avi|mpg|mpeg|mp4|3gp)$/.test(ext)) {
Or you can use an array:
if (['avi', 'mpg', 'mpeg', 'mp4', '3gp'].indexOf(ext) != -1) {
(Assuming you're not worried about IE<=8, or are using a shim, or use jQuery's $.inArray() instead of .indexOf().)
Or this seems an obvious place to use a switch statement:
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 picturebreak;
default:
// This extension isn't supported herebreak;
}
Post a Comment for "Javascript If Else Statement With Multiple Or Following Condition"