Несколько небольших замечаний по проверке типов - на самом деле все не так сложно:
Используйте 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
).
edit: Есть еще некоторые проблемы с обнаружением функциональных объектов:
В принципе, вы можете использовать typeof func === 'function'
и func instanceof Function
.
Проблема в том, что в неназванном браузере большой корпорации эти проверки возвращают неверные результаты для некоторых предопределенных функций (их тип задается как 'object'
). Я не знаю обходного пути для этого - проверки работают надежно только для пользовательских функций ...
edit2: Существуют также проблемы с объектами, переданными из других окон / фреймов, поскольку они будут наследоваться от разных глобальных объектов - то есть instanceof
завершится ошибкой. Обходные пути для встроенных объектов существуют: например, вы можете проверить наличие массивов с помощью Object.prototype.toString.call(x) === '[object Array]'
.