В Javascript проверка типа только с использованием оператора typeof плохая? - PullRequest
2 голосов
/ 17 августа 2011

Я вижу, что есть много разных способов проверить тип переменной в Javascript.

Но использование typeof оператора кажется намного проще, чем другие способы - например,

if(typeof someVar == typeof "")

if(typeof someVar == typeof [])


function myFunc() {}

if(typeof someVar == typeof myFunc)

Это вообще допустимо или действительно плохая практика? Почему?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 17 августа 2011

Одной из основных проблем typeof является то, что он не будет возвращать «string», «boolean», «number», если вы создадите эти объекты с помощью их конструкторов. Посмотрите на этот пример тестирования на строки

typeof "my-string" // "string"
typeof String('my-string') // 'string'
typeof new String("my-string") // "object".

Следовательно, при проверке, является ли аргумент или переменная строкой, логическим числом, числом, необходимо использовать Object.prototype.toString, который возвращает согласованные результаты

function isString(obj) {
   return Object.prototype.toString.call(obj) == "[object String]";
}
2 голосов
/ 17 августа 2011

typeof идеально подходит для использования, но не для общей проверки типов.Это не его цель.

typeof [] == "object"

Он может различать только "object", "function", "undefined" и примитивы "boolean", "number" и "string".Для более точной проверки типа вам необходимо использовать instanceof или более сложные проверки.

[] instanceof Array // works reliably only if there's a single frame
toString.call([]) == "[object Array]" // always works, but only with some types.
0 голосов
/ 17 августа 2011

Если вам нужно проверить, совпадают ли значения и типы, вы можете использовать оператор сравнения ===; однако, если вам просто нужно проверить тип, было бы наиболее целесообразно использовать instanceof.

...