Ну, вы можете иметь выражения в выражении case
, поэтому ваш переключатель не является синтаксической ошибкой.Но вы должны понимать, что Case Clause сравнивается с помощью === (строгое сравнение).Как только вы поймете, что значение должно точно соответствовать значению выражения в вашем switch(expression)
, вы можете найти выражения в js.
Вызовы функций являются выражениями, поэтому давайте попробуем с ними:
function xbox(amount) { return amount >= 10000 && amount < 15000 && amount; }
function reward(amount) {
var ps3 = function(amount) { return amount >= 7500 && amount < 10000 && amount; }
function imac(amount) { return amount >= 15000 && amount; }
var $reward = $("#reward");
switch (amount) {
case ps3(amount):
$reward.text("Play Station 3");
break;
case xbox(amount):
$reward.text("XBOX 360");
break;
case imac(amount):
$reward.text("iMac");
break;
default:
$reward.text("No reward");
break;
}
}
reward(8200)// -> Play Station 3
reward(11000)// -> XBOX 360
reward(20000)// -> iMac
Как видите, вы можете использовать как выражения функций, так и определения функций.Это не важноТолько то, что выражение в предложении case является выражением для оценки.То же самое, что и вы, только вы не вернули значение, равное сумме, но верное или ложное значение.В моем примере я возвращаю точную сумму, если мое условие истинно, поэтому запускаю сравнение, чтобы соответствовать.
Вот ваш фиксированный код:
function reward(amount) {
var $reward = $("#reward");
switch (amount) {
case (amount >= 7500 && amount < 10000 && amount):
$reward.text("Play Station 3");
break;
case (amount >= 10000 && amount < 15000 && amount):
$reward.text("XBOX 360");
break;
case (amount >= 15000 && amount):
$reward.text("iMac");
break;
default:
$reward.text("No reward");
break;
}
}
Вот спецификация: https://tc39.github.io/ecma262/#sec-switch-statement Ссылка на es2016, потому что ее проще искать, чем старый pdf es3 1999 года. Но он всегда работал так, но это малоизвестный факт.
Однако я сомневаюсь, что это быстреечем if
заявления.Если вы хотите, чтобы ваш пробег был быстрым, то не не трогайте DOM.