首先来说它俩的区别:

1.typeof是一个一元运算,放在一个运算数之前,运算数可以是任意类型。

2.instaceof是一个二元运算,它主要是判断一个变量是否是某个对象的实例。


接下来先说typeof的用法,它一般返回如下几个结果:“number”、“string”、“boolean”、“object”、“function”、“undefined”。

写法:typeof  x  ||  typeof(x);

一般在编程中获取一个变量是否存在就可以用typeof,如if(typeof a!="undefined"){code},而不是用if(a)判断,因为如果a不存在(未声明)则会出错。

注:对于array、null等特殊对象使用typeof返回的一律是object,这正是使用typeof的局限性。如果未定义返回的就是undefined。

接着说说instanceof的用法:

写法:

浅谈JS中的typeof和instanceof的区别_未定义

如:

var a = new Array();
a instanceof Array   //true
a instanceof Object   //true
  • 1.
  • 2.
  • 3.

注:谈到 instanceof 要多说一个问题,就是 function 的 arguments,大家也许都认为 arguments 是一个 Array,但如果使用 instaceof 去测试会发现 arguments 不是一个 Array 对象,尽管看起来很像。 

另外:

浅谈JS中的typeof和instanceof的区别_未定义_02

但 

浅谈JS中的typeof和instanceof的区别_未定义_03

所以,instanceof 测试的 object 是指 js 语法中的 object,不是指 dom 模型对象。 使用 typeof跟instanceof有区别

浅谈JS中的typeof和instanceof的区别_未定义_04

会得到object