typeof与instanceof的区别

JS中会使用typeof 和 instanceof来判断一个变量是否为空或者是什么类型的。
typeof
ES6规范中有7中数据类型,分别是基本类型和引用类型两大列
基本类型(简单类型、原始类型):String、Number、Boolean、Null、Undefined、Sysbol
引用类型(复杂类型):Object(对象、function、Array)

-typeof 对于对象,除了函数都会显示 object ,比如typeof(window),typeof(document),typeof(null)返回的值都是object。

typeof [] // 'object'
typeof {} // 'object'
  • 对于函数类型,返回的值是 function。比如:typeof(eval),typeof(Date)返回的值都是function。
typeof console.log // 'function'
  • typeof 对于基本类型,除了 null都可以显示正确的类型
typeof 1 // 'number'
typeof '1' // 'string'
typeof undefined // 'undefined'
typeof true // 'boolean'
typeof Symbol() // 'symbol'
typeof b // b 没有声明,但是还会显示 undefined
  • 对于 null 来说,虽然它是基本类型,但是会显示 object,这是一个存在很久了的 Bug
typeof null // 'object'

instanceof

  • 返回值为布尔值;
  • instanceof 可以正确的判断对象的类型,因为内部机制是通过判断对象的原型链中是不是能找到类型的 prototype
  • instanceof 只能用来判断两个对象是否属于实例关系, 而不能判断一个对象实例具体属于哪种类型。
var a = new Array();
alert(a instanceof Array); // true
alert(a instanceof Object) // true
//如上, 会返回 true, 同时 alert(a instanceof Object) 也会返回 true;
// 这是因为 Array 是 object 的子类。
alert(b instanceof Array) // b is not defined
function Test() {};
var a = new test();
alert(a instanceof test) // true

你可能感兴趣的:(typeof与instanceof的区别)