typeof
用来判断一个变量是否为原始类型,即是否为6种原始值:Null, Undefined, Boolean, Number, String, Symobl 中的一种。
其用法为
1 | let a = ""; |
使用typeof
判断变量,将会返回变量对应的类型。如果该变量是引用值,那么不管它是什么对象,typeof
都会返回object
。值得注意的是,如果该变量是原始值中的Null类型,typeof
也会返回object
。
typeof
只能判断一个变量是什么原始类型,对于引用类型,它只能返回object
,与之相对instanceof
就是用来判断一个变量是不是给定引用类型的。其用法为
1 | result = variable instanceof constructor |
原型链决定了一个变量是不是给定引用类型。因为所有引用值都是Object
的实例,所以通过instanceof
检测任何引用值和Object
构造函数都会返回true
。同样的,如果用instanceof
检测原始值,则始终会返回false
,因为原始值不是对象。
因此,typeof
和instanceof
的区别有两个:
1. 用法不一样,typeof
返回待判断变量的类型,instanceof
则相当于==,判断该变量是否为我给出的类型。
2. 判断的值类型不一样,typeof
用来判断原始值,instanceof
用来判断引用值。