js判断数据类型的方式详解(面试题)

一.typeof

1.用来判断基本数据类型

null、Object、String判断的结果都为object

js判断数据类型的方式详解(面试题)_第1张图片js判断数据类型的方式详解(面试题)_第2张图片

二.instanceof

检测构造函数的 prototype 属性是否在某个实例对象的原型链上

不能判断简单数据类型,只能判断复杂数据类型。

复杂数据类型的具体类型不一定判断正确。

js判断数据类型的方式详解(面试题)_第3张图片js判断数据类型的方式详解(面试题)_第4张图片

手写instanceof

function myInstanceof(source, target) {
  // 获取需要判断对象的原型
  let proto = Object.getPrototypeOf(source); 
  // 获取构造函数的 prototype 对象
  let prototype = target.prototype; 

  // 判断构造函数的 prototype 对象是否在对象的原型链上
  while (true) {
     if (!proto) return false; //尽头Object.prototype.__proto__ = null

     if (proto === prototype) return true;

     proto = Object.getPrototypeOf(proto); 
   }
}

三.constructor

与js代码的执行机制有关。在一个函数定义时,js会给这个函数添加一个prototype对象(原型对象),之后在原型对象上添加一个constructor属性并指向函数的引用。当函数作为构造函数创建对象时,新创建的对象的原型对象的constructor会继承构造函数的原型对象的constructor。

js判断数据类型的方式详解(面试题)_第5张图片js判断数据类型的方式详解(面试题)_第6张图片

四.Object.prototype.toString.call()

Object对象,直接调用toString()就能返回[object Object]

其他对象,则需要通过call、apply来调用才能返回正确的类型信息

js判断数据类型的方式详解(面试题)_第7张图片js判断数据类型的方式详解(面试题)_第8张图片

你可能感兴趣的:(原型模式)