Основываясь на ваших изменениях, я считаю, что это должно сработать:
if (a == 1 && b == 2 && c == 3) {
// do something
} else if (a == 4 && b == 5 && c == 6) {
// do something else
}
Если вы действительно хотите вместо него использовать оператор switch, это возможно:
def val = [a, b, c]
switch (val) {
case {it == [1, 2, 3]}:
// something
break;
case {it == [4, 5, 6]}:
// something else
break;
Но я не уверен, почему вы предпочитаете это блоку if / else.
Некоторые маленькие комментарии по проверке типа - это на самом деле не, который усложнил:
Использовать typeof
проверять на примитивы и instanceof
проверять на типы конкретного объекта.
Пример: Проверьте на строки с
typeof x === 'string'
или
typeof x === 'string' || x instanceof String
если Вы хотите включать строковые объекты.
Для проверки на массивы просто используйте
x instanceof Array
Это должно работать обоснованно хорошо (существует несколько известных исключений - например, Firefox 3.0.5 имеет ошибку где window instanceof Object === false
хотя window.__proto__ instanceof Object === true
).
править: Существуют некоторые дальнейшие проблемы с обнаружением функциональных объектов:
В принципе Вы могли оба использовать typeof func === 'function'
и func instanceof Function
.
Выгода - то, что в браузере без имени от крупной корпорации эти проверки возвращают неправильные результаты для некоторых предопределенных функций (их тип дан как 'object'
). Я не знаю ни о каком обходном решении для этого - проверки только работают надежно на пользовательские функции...
edit2: существуют также проблемы с объектами, переданными из других окон/кадров, поскольку они наследуются различным глобальным объектам - т.е. instanceof
перестанет работать. Обходные решения для встроенных объектов существуют: Например, можно проверить на массивы через Object.prototype.toString.call(x) === '[object Array]'
.
Как насчет throw
: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Statements/throw
Также тип не различает Массив, Пустой указатель, Объект очень хорошо. Посмотрите на funciton здесь: http://javascript.crockford.com/remedial.html, плюс существует несколько других способов сделать это.
Лично я не сделал бы типа, проверяющего, так как это - шаг, который просто добавит больше времени обработки к коду. Если бы Вы заботитесь о производительности, Вы хотели бы обрубить как можно больше миллисекунд времени обработки. Хорошая Документация исправит потребность в проверке.
Библиотеки как jQuery не сообщают пользователю ошибки.
Если функция ожидает число, и пользователь передает строку, функция просто возвращается, ничего не делая.
Тем путем Вы избежите ошибок JavaScript, открывающихся на живом веб-сайте.
PS. Просто удостоверьтесь, что всегда ввели, проверяют Ваши введенные параметры, для предотвращения бросаемых ошибок JavaScript.
Что о только для тихого преобразования строки в числовой тип данных на функциональном запуске?
Всегда можно определять тип данных 'строки'. Не можете Вы?
Проблема с проверкой типа состоит в том что его на самом деле довольно твердое, чтобы сделать. Например:-
var s = new String("Hello World!");
alert(typeof s);
Что предупреждено? Ответ: "объект". Ее истинное это - ненормальный способ инициализировать строку, но я вижу его довольно часто, тем не менее. Я предпочитаю делать попытку преобразований, в случае необходимости или просто ничего не делают.
Сказав, что в среде JavaScript, в которой я имею полный контроль (который не верен, если Вы просто обеспечиваете библиотеку) я использую этот набор опытного:-тонких настроек
String.prototype.isString = true;
Number.prototype.isNumber = true;
Boolean.prototype.isBoolean = true;
Date.prototype.isDate = true;
Array.prototype.isArray = true;
Следовательно тестирование на общие типы может быть столь же простым как:-
if (x.isString)
хотя все еще необходимо не упустить пустой/неопределенный:-
if (x != null && x.isString)
В дополнение к предотвращению new String("thing")
глюк, этот подход особенно добивается признания в Даты и Массивы.
Вы могли проверить на некоторое значение как набор "debug=1". Если существует - Вы могли бы произвести ошибки как предупреждения. Таким образом в режиме разработки пользователь будет видеть их, но на реальном сайте он выключит его. Тем же путем браузер не покажет Вам сообщение об ошибке - необходимо посмотреть на консоль JS.
Также существует FireBug. Вы могли обнаружить, что и помещают сообщения отладки FB также.