Существует ли лучший способ записать следующее условное выражение в JavaScript?
if ( value == 1 || value == 16 || value == -500 || value == 42.42 || value == 'something' ) {
// blah blah blah
}
Я очень не хочу иметь все те логические ORs, представленные в виде строки вместе. Я задаюсь вопросом, существует ли некоторая стенография.
Спасибо!
var a = [1, 16, -500, 42.42, 'something'];
var value = 42;
if (a.indexOf(value) > -1){
// blah blah blah
}
Upd: Пример утилитной функции, предложенный в комментариях:
Object.prototype.in = function(){
for(var i = 0; i < arguments.length; i++){
if (this == arguments[i]) return true;
}
return false;
}
Так вы можете написать:
if (value.in(1, 16, -500, 42.42, 'something')){
// blah blah blah
}
Вы можете расширить объект массива:
Array.prototype.contains = function(obj) {
var i = this.length;
while (i--) {
if (this[i] == obj) {
return true;
}
}
return false;
}
Затем, если вы сохраните все эти значения в массиве, вы можете сделать что-то вроде MyValues.contains (value)
переключатель - приемлемый выбор. Вы также можете использовать карту, в зависимости от сложности проблемы (предполагая, что у вас их больше, чем вы указали в своем примере).
var accept = { 1: true, 16: true, '-500': true, 42.42: true, something: true };
if (accept[value]) {
// blah blah blah
}
accept может быть сгенерирован программно из массива, конечно. Зависит от того, как часто вы планируете использовать этот шаблон. :/
Ну, вы можете использовать оператор switch...
switch (value) {
case 1 : // blah
break;
case 16 : // blah
break;
case -500 : // blah
break;
case 42.42: // blah
break;
case "something" : // blah
break;
}
Если вы используете JavaScript 1.6 или выше, вы можете использовать нотацию indexOf для массива:
if ([1, 16, -500, 42.42, "something"].indexOf(value) !== -1) {
// blah
}
А для высшего уровня хакерства вы можете перевести значения в строки (это работает для всех браузеров):
if ("1,16,-500,42.42,something".indexOf(value) !== -1) {
// blah
}
нет, это сокращение.
как альтернатива, вы можете сделать switch
switch (value) {
case 1 :
case 16 :
case -500 :
....
}
что проще в управлении, если вам нужно много возможных значений, но на самом деле ваша версия все равно короче :)
var value= -55;
switch(value){
case 1: case 16: case -55: case 42.5: case 'something':
alert(value); break;
}