先说结论,通俗易懂一点的理解就是 typeof
和instanceof
都是用来检测变量类型的操作符,typeof
是判断变量是什么基本类型的; instanceof
是判断对象到底是什么类型的
typeof
主要用于判断数据是不是基本数据类型:
String、Number、Object、Null、Undefined、Boolean,但是无法判断出function、array、regExp
返回值是一个字符串,该字符串说明运算数的类型。我们可以使用 typeof 来判断一个变量是否存在
typeof 一般只能返回如下几个结果:
number、boolean、string、function、object、undefined。
原始类型
数值、字符串、布尔值分布返回 number、string、boolean
typeof 27 // "number"
typeof 'lzc' // "string"
typeof false // "boolean"
函数
函数返回function
function f() {}
typeof f // "function"
undefined
undefined 和没有用 var 声明的变量,用typeof 返回的都是 undefined
typeof undefined // "undefined"
typeof x // "undefined"
object
除了以上几种情况,其他情况都返回object
typeof window // "object"
typeof {} // "object"
typeof [] // "object"
typeof null // "object"
这里空数组[]的返回值是object,所以不能用typeof分辨数组和对象
instanceof
instanceof 是判断变量是否为某个对象的实例,返回值为true或false
{} instanceof Array // false
[] instanceof Array // true
[] instanceof Object // true
typeof 对数组 [] 和对象 {} 的返回值都是Object,无法区分数组和对象,但是instanceof可以区分
注意: 数组Array是对象Object的一个子类,所以 a instanceof Object的返回值是 true