首页 > Web开发 > 详细

JS typeof和instanceof

时间:2020-12-05 22:46:59      阅读:27      评论:0      收藏:0      [点我收藏+]

目前,js数据类型究竟有多少种

  1. String
  2. Number
  3. Boolean
  4. null
  5. undefined
  6. Object
  7. Symbol
  8. BigInt

变量类型判断方法

  1. Object.prototype.toString.call(),例如
Object.prototype.toString.call(‘hello‘); // "[object String]"
Object.prototype.toString.call({name:‘jack‘}); // "[object Object]"
  1. typeof判断基本类型,返回一个字符串,表示未经计算的操作数的类型.
    • 对于基本类型,除null以外,均可以返回正确的结果,NaN返回number。
    • 对于引用类型,除function以外,一律返回 object 类型。
    • 对于 null ,返回object类型。
    • 对于function返回function类型。
    • 对于包装类(如Object,String,Number等)均返回function
typeof ‘hello‘ //"string"
typeof({}) //"object"
typeof null //"object"
  1. instanceof用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。即可以理解为判断某个对象是什么具体的引用类型。例如
function a(){}
a instanceof Object // true
null instanceof Object //false
"a" instanceof String //false

模拟实现typeof 和 instanceof

typeof:利用Object.prototype.toString.call()返回值进行字符串切割来实现

function myTypeof(arg){
  let typeStr = Object.prototype.toString.call(arg);
  return typeStr.split(‘ ‘)[1].split(‘]‘)[0].toLowerCase();
}

instanceof:通过便利原型链来比较实现

function myInstanceof(instance,type){
  while(instance){
    instance=instance.__proto__;
    if(instance===type.prototype) return true;
  }
  return false
}

问题汇总(FAQ)

  1. 为什么typeof null是‘object‘,但null instanceof Object却是false呢?typeof NaN是‘number‘,但NaN instanceof Number为false?
  2. typeof和instanceof有什么区别?
  3. typeof返回值有几个?
  4. instanceof有什么缺陷?

参考

JS typeof和instanceof

原文:https://www.cnblogs.com/xingguozhiming/p/14091227.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!