Если мы используем ключевое слово в качестве названия идентификатора, мы получаем ошибку компилятора “identifier ожидаемый, вЂIdentifier Name’ является keyword”, Чтобы преодолеть эту ошибку, снабдить префиксом идентификатор “@”. Такие идентификаторы являются дословными идентификаторами. Символ не является на самом деле частью идентификатора, таким образом, идентификатор мог бы рассматриваться на других языках как нормальный идентификатор без префикса
вы можете попробовать злоупотребить переключателем, вызывающим провал
var x = 5;
switch (x) {
case 1: case 2: case 3: case 4: ...
break;
case 13: case 14: case 15: ...
break;
...
}
, который очень многословен
, или вы можете попробовать это
function checkRange(x, n, m) {
if (x >= n && x <= m) { return x; }
else { return !x; }
}
var x = 5;
switch (x) {
case checkRange(x, 1, 12):
//do something
break;
case checkRange(x, 13, 19):
...
}
, чтобы получить желаемое поведение. Причина, по которой я возвращаю ! X
в else из checkRange, состоит в том, чтобы предотвратить проблему, когда вы передаете undefined
в оператор switch. если ваша функция возвращает undefined
(как в примере jdk) и вы передаете undefined
в переключатель, то будет выполнен первый случай. ! X
гарантированно не равно x
при любом тесте на равенство, поэтому оператор switch выбирает, какой случай выполнить.
Нет, для этого вам нужно использовать серию if / else if. JavaScript не такой уж фантастический. (Языков немного.)
Вы можете делать интересные кладжи. Например, чтобы проверить число по диапазону с помощью переключателя JavaScript, можно написать пользовательскую функцию. В основном, функция test дает значение n и возвращает его, если оно находится в диапазоне. В противном случае возвращается undefined или какое-то другое фиктивное значение.
<script>
// Custom Checking Function..
function inRangeInclusive(start, end, value) {
if (value <= end && value >= start)
return value; // return given value
return undefined;
}
// CODE TO TEST FUNCTION
var num = 3;
switch(num) {
case undefined:
//do something with this 'special' value returned by the inRangeInclusive(..) fn
break;
case inRangeInclusive(1, 10, num):
alert('in range');
break;
default:
alert('not in range');
break;
}
</script>
Это работает в Google Chrome. Я не тестировал другие браузеры.
Опоздал на вечеринку, но в поисках ответа на тот же вопрос наткнулся на эту тему. В настоящее время я действительно использую переключатель, но по-другому. Например:
switch(true) {
case (x >= 1 && x <= 12):
//do some stuff
break;
case (x >= 13 && x <= 19):
//do some other stuff
break;
default:
//do default stuff
break;
}
Я считаю, что это гораздо легче читать, чем набор операторов IF.