Я знаю, что это отличается от того, что было сказано выше для исходной задачи, которая использует вариант строкового типа для аргумента оператора switch, но я хотел опубликовать здесь "gotcha", так как он находится в том же духеиз «Оператор переключения javascript не работает».
Сценарий, который я хочу охватить, - это когда вы пытаетесь использовать вариант числового типа для аргумента оператора переключения.Вы можете столкнуться со странной ситуацией, когда, даже если вы преобразовали вариант в число, он все равно не будет зарегистрирован как число.
Посмотрите на этот сценарий:
var intCase = document.getElementById("somePageElementWithANumericValue").value;
intCase = new Number(intCase); //This is supposed to be a number now...
switch(intCase)
{
case 0:
alert("Case 0");
break;
case 1:
alert("Case 1");
break;
case 2:
alert("Case 2");
break;
default:
//But this is what will execute
alert("Unexpected case? --> [" + intCase + "]");
break;
}
Итак, исправление дляэта ситуация заключается в том, чтобы взять ваш преобразованный вариант и немного обмануть, заставив его быть числом.Просто добавьте ноль к нему, теперь это явно число.
intCase = new Number(intCase) + 0; //This is like type casting
Это ситуация, с которой я недавно столкнулся, и пока я не выполнил свой трюк "приведения типов", я не мог заставить этот скрипт работатьвсе.Я не понимаю, почему класс Number не справился со своей задачей, но, по крайней мере, есть обходной путь.
Теперь я уверен, что есть люди, у которых никогда не было такой проблемы.Все, что я могу сказать об этом, это не может быть проблемой для всех, но я знаю, что такие странные проблемы случаются.Поскольку JavaScript является языком сценариев и не является строго типизированным, я ожидаю, что такого рода проблемы могут возникнуть.VBScript не лучше, я видел, что он делает действительно невероятно плохие вещи, такие как оценка оператора if, который был явно верным ложному.