typeof和intanceof 区别

48 阅读1分钟

typeof

typeof 是一个一元操作符不是函数,所以不需要传递参数,使用方法非常简单:typeof A,使用typeof会直接返回类型结果

// Numbers 
typeof 37 === 'number';
// Strings 
typeof "" === 'string';
// Booleans 
typeof true === 'boolean';
// Symbols 
typeof Symbol('foo') === 'symbol';
// Undefined 
typeof undefined === 'undefined'; 
typeof blabla === 'undefined'; // 一个未定义的变量,或者一个定义了却未赋初值的变量
// Objects 
typeof {a:1} === 'object';
type [1,2,3] = 'object'
------------------------'下面是不是有点奇怪?'--------------------------
// 函数
typeof function(){} === 'function';
// Null
typeof null === 'object'

我们可以轻松的用typeof判断数据类型

instanceof

instance中文翻译为实例,因此instanceof的含义就不言而喻,判断该对象是谁的实例,同时我们也就知道instanceof是对象运算符。

instanceof的判断就是根据原型链进行搜寻,在对象obj1的原型链上如果存在另一个对象obj2的原型属性,那么表达式(obj1 instanceof obj2)返回值为true;否则返回false。下面代码说明了instanceof的使用方法

function Parent(){};
function Child(){};
function Other(){};

Child.prototype = new Parent();
let child = new Child();

child instanceof Child; // true
child instanceof Parent; // true
child instanceof Object; // true
child instanceof Other; // false

总结

typeof与instanceof都是判断数据类型的方法,区别如下:

  1. typeof会返回一个变量的基本类型,instanceof返回的是一个布尔值
  2. instanceof 可以准确地判断复杂引用数据类型,但是不能正确判断基础数据类型
  3. 而typeof 也存在弊端,它虽然可以判断基础数据类型(null 除外),但是引用数据类型中,除了function 类型以外,其他的也无法判断