instanceof用途

简单数据类型:String、Number、Boolean、undefined、nulll 复杂数据类型:Object(除了简单数据类型以外,复杂数据类型都为Object)

判断简单数据类型使用typeof:返回数据类型

  1. let str = '张三'
  2. console.log(typeof str) // string
  3. console.log(typeof null) // object

判断复杂数据类型使用instanceof:返回boolean值

  1. let arr = [1,2,3]
  2. console.log(arr instanceof Array) // true
  3. console.log(arr instanceof Object) // true
  4. console.log(null instanceof Object) // false

instanceof原理

instanceof的原理是原型链, javascript的原型链的原理是链表实现的

原理:判断当前目标值是否等于检测的数据类型的原型prototype,如果不等于,就沿着当前目标值的原型链proto依次向上找,直到值为null返回false,否则返回true
代码:

  1. const instanceofs = (target,obj)=>{
  2. let p = target;
  3. while( p ){
  4. if( p == obj.prototype ){
  5. return true;
  6. }
  7. p = p.__proto__;
  8. }
  9. return false;
  10. }
  11. console.log( instanceofs( [1,2,3] , Object ) )