先说结论,通俗易懂一点的理解就是
typeofinstanceof都是用来检测变量类型的操作符,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

文章目录