在Javascript中,是否仅使用typeof运算符bad检查类型?

在Javascript中,是否仅使用typeof运算符bad检查类型?,javascript,types,typeof,Javascript,Types,Typeof,我看到有很多不同的方法来检查Javascript中变量的类型 但是使用typeof操作符似乎比其他方法更简单- e、 g 这样做是有效的还是非常糟糕的做法?为什么? 谢谢。typeof非常适合使用,但不适用于常规类型检查。这不是它的目的 typeof [] == "object" 它只能区分“对象”、“函数”、“未定义”和原语“布尔”、“数字”和“字符串”。要进行更高级的类型检查,需要使用instanceof或更复杂的检查 [] instanceof Array // works reliab

我看到有很多不同的方法来检查Javascript中变量的类型

但是使用typeof操作符似乎比其他方法更简单- e、 g

这样做是有效的还是非常糟糕的做法?为什么?


谢谢。

typeof
非常适合使用,但不适用于常规类型检查。这不是它的目的

typeof [] == "object"
它只能区分
“对象”
“函数”
“未定义”
和原语
“布尔”
“数字”
“字符串”
。要进行更高级的类型检查,需要使用
instanceof
或更复杂的检查

[] instanceof Array // works reliably only if there's a single frame
toString.call([]) == "[object Array]" // always works, but only with some types.

如果需要检查值和类型是否相同,可以使用
=
比较运算符;但是,如果您只需要检查类型,则最适合使用
instanceof

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]";
}

虽然我同意你的观点,但这并不意味着学校的一切都是不准确的。它可能是一个有用的资源,就像StackOverflow一样。大多数web开发人员都不同意你的观点,诺曼,可能那里有一些准确的信息,但你为什么要一直提到一个网站,在那里他们的描述很马虎,而且示例会延续糟糕的编码风格。touche。我没有使用它,这是我第一次引用它,但将来一定会引用更好的资源:)如果有多个窗口对象(例如在I/frames中),则
instanceof Array
测试将不起作用。这是
window.frames[0]。Array==这是window.frames[1]。Array
返回false@JuanMendes:哎呀!我本想这么说的,但我的帖子似乎漏掉了几句话。编辑。
function isString(obj) {
   return Object.prototype.toString.call(obj) == "[object String]";
}