Оператор условного переключения Javascript
Есть ли способ написать условный оператор switch в javascript?
Я предполагаю, что нет, так как следующее значение всегда имеет значение по умолчанию:
var raw_value = 11.0;
switch(raw_value)
{
case (raw_value > 10.0):
height = 48;
width = 36;
break;
case (raw_value > 5.0):
height = 40;
width = 30;
break;
default:
height = 16;
width = 12;
break;
}
Если нет, что я должен использовать вместо этого - инструкция long if/else?
спасибо:)
Ответы
Ответ 1
В выражении switch
оцениваемое значение выражения switch
сравнивается с оцененными значениями случаев. Таким образом, значение raw_value
(число) сравнивается с raw_value > 10.0
(выражение сравнения) и raw_value > 5.0
(выражение сравнения).
Итак, если одно из выражений case не дает числа, равного 11.0
, или вы используете выражение switch
true
, вы всегда получите случай по умолчанию.
Просто используйте простой if
/else
вместо:
var raw_value = 11.0;
if (raw_value > 10.0) {
height = 48;
width = 36;
} else if (raw_value > 5.0) {
height = 40;
width = 30;
} else {
height = 16;
width = 12;
}
Ответ 2
Вот так:
var raw_value = 11.0;
switch(true) {
case (raw_value > 10.0):
height = 48;
width = 36;
break;
case (raw_value > 5.0):
height = 40;
width = 30;
break;
default:
height = 16;
width = 12;
}
Выражения в операторах case
будут оцениваться как true
или false
, и если это соответствует условию switch
... voilà. default
действует как else
.
Бонус: вы можете инвертировать всю логику, просто заменив true
на false
. С помощью операторов if ... else if
вам нужно будет редактировать каждое предложение if в отдельности.
Ответ 3
Нет, оператор switch
не работает так. Однако это утверждение не всегда проще. Например, версия switch
имеет 15 строк:
var raw_value = 11.0;
switch(raw_value) {
case (raw_value > 10.0):
height = 48;
width = 36;
break;
case (raw_value > 5.0):
height = 40;
width = 30;
break;
default:
height = 16;
width = 12;
break;
}
и только "длинная" if/else
версия 11:
var raw_value = 11.0;
if (raw_value > 10.0) {
height = 48;
width = 36;
} else if (raw_value > 5.0) {
height = 40;
width = 30;
} else {
height = 16;
width = 12;
}
Итак, в вашем случае лучше использовать второй, чем первый...
Ответ 4
Не пытайтесь делать это дома или относитесь к этому серьезно, это просто для удовольствия...
function conditionalSwitch( value, cond, callback /* cond, callback, cond, callback, ... */ )
{
for (var i = 1; i < arguments.length; i += 2) {
if ( arguments[i](value) ) {
arguments[i+1](value);
return;
}
}
}
var width, height;
conditionalSwitch( 5.1,
function(val) { return val > 10 },
function () {
height = 48;
width = 36
},
function(val) { return val > 5 },
function () {
height = 40;
width = 30
},
//Default
function(val) { return true },
function () {
height = 16;
width = 12;
}
)
console.log(width, height);