Javascript, если оператор с несколькими допустимыми условиями
Возможный дубликат:
Javascript: самый красивый способ сравнить одно значение с несколькими значениями
Javascript Если оператор, используемый для проверки неработающих файлов, не работает
В JS я пытаюсь проверить, заканчивается ли расширение в "png" "jpg" или "gif". Я знаю, что это можно сделать с помощью оператора switch, но мне интересно, есть ли более простой способ сделать все это в условном выражении if
. Как:
if (aExtensions[i].toLowerCase() == ('jpg' || 'png' || 'gif')) {}
Какой лучший способ достичь этого?
Ответы
Ответ 1
Вы можете использовать такой массив:
var extensions = ["jpg", "png", "gif"];
if (extensions.indexOf(aExtensions[i].toLowerCase()) > -1) {
// match
}
В этом случае вы сохраняете "действительные" расширения. Затем вы можете использовать метод indexOf
Array
, чтобы узнать, соответствует ли какой-либо из элементов массива конкретному расширению, на который вы смотрите, - проверка значения 0
или больше.
indexOf
не поддерживается в старых браузерах, поэтому вам нужно будет включить polyfill для резервного копирования... вы можете взглянуть на https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/indexOf#Compatibility, но для этого есть несколько решений.
Конечно, если вы хотите использовать только инструкции if
, вы можете использовать этот формат:
var ext = aExtensions[i].toLowerCase();
if (ext == "jpg" || ext == "png" || ext == "gif") {
// match
}
Еще одна возможность, о которой я могу думать, - это оператор switch
, например:
var ext = aExtensions[i].toLowerCase();
switch (ext) {
case "jpg":
case "png":
case "gif":
// match
break;
case default:
// No match
}
Я мог бы также включить его (другие ответы были первыми, определенно), но еще один, о котором я могу думать, - это использовать регулярное выражение, например:
if (/jpg|png|gif/i.test(aExtensions[i])) {
// match
}
Но обратите внимание, что вы никогда не сможете индивидуально получить расширения обратно, и поэтому я предпочел бы один из первых двух вариантов, которые я дал.
Ответ 2
Как насчет регулярного выражения?
if ( /jpg|png|gif/i.test( aExtensions[i] ) ) {
...
}
Ответ 3
Еще один способ сделать это - использовать литерал объекта, подобный этому,
if ({'jpg':1,'png':1,'gif':1}[aExtensions[i].toLowerCase()]) {
// ...
}
Таким образом, вы хотите узнать, имеет ли анонимный объект {'jpg':1,'png':1,'gif':1}
свойство, которое будет истинно с помощью if
. 1
соответствует этому, undefined
не делает.
Если вы используете объект, вы также можете использовать оператор in
(как указано Ian), который дает true
, если объект имеет такой ключ, который не имеет значения для него.
if (aExtensions[i].toLowerCase() in {'jpg':0,'png':1,'gif':2}) {
// ...
}
Обратите внимание на этот раз, как 'jpg'
все еще проходит, хотя 'jpg':0
.
Ответ 4
Вы можете использовать переменное и тройное сравнение, но это уродливо.
Или вы можете просто использовать массив и проверить, содержится ли в нем строка.
if (~ ["jpg", "png", "gif"].indexOf(aExtensions[i].toLowerCase()) …
Тем не менее, для сложного сравнения != -1
и отсутствия встроенного indexOf
в старых IE, люди склонны использовать регулярные выражения:
if (/jpg|png|gif/i.test(aExtensions[i])) …