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用来判断引用值。