首页 > 其他分享 >typeof 与 instanceof 区别

typeof 与 instanceof 区别

时间:2023-06-11 21:22:45浏览次数:37  
标签:instanceof object 区别 Object toString typeof call prototype

typeof:

点击查看代码
typeof 1 // 'number'
typeof '1' // 'string'
typeof undefined // 'undefined'
typeof true // 'boolean'
typeof Symbol() // 'symbol'
typeof null // 'object'
typeof [] // 'object'
typeof {} // 'object'
typeof console // 'object'
typeof console.log // 'function'
instanceof: // 定义构建函数
点击查看代码
// 定义构建函数
let Car = function() {}
let benz = new Car()
benz instanceof Car // true
let car = new String('xxx')
car instanceof String // true
let str = 'xxx'
str instanceof String // false
区别:
  • typeof会返回一个变量的基本类型,instanceof返回的是一个布尔值,需要注意的是typeof null会返回object
  • instanceof 可以准确地判断复杂引用数据类型,但是不能正确判断基础数据类型
  • 而typeof 也存在弊端,它虽然可以判断基础数据类型(null 除外),但是引用数据类型中,除了function 类型以外,其他的也无法判断

如果需要通用检测数据类型,可以采用Object.prototype.toString,调用该方法,统一返回格式“[object Xxx]”的字符串

点击查看代码
Object.prototype.toString({})       // "[object Object]"
Object.prototype.toString.call({})  // 同上结果,加上call也ok
Object.prototype.toString.call(1)    // "[object Number]"
Object.prototype.toString.call('1')  // "[object String]"
Object.prototype.toString.call(true)  // "[object Boolean]"
Object.prototype.toString.call(function(){})  // "[object Function]"
Object.prototype.toString.call(null)   //"[object Null]"
Object.prototype.toString.call(undefined) //"[object Undefined]"
Object.prototype.toString.call(/123/g)    //"[object RegExp]"
Object.prototype.toString.call(new Date()) //"[object Date]"
Object.prototype.toString.call([])       //"[object Array]"
Object.prototype.toString.call(document)  //"[object HTMLDocument]"
Object.prototype.toString.call(window)   //"[object Window]"

包装使用:

点击查看代码
function getType(obj){
  let type  = typeof obj;
  if (type !== "object") {    // 先进行typeof判断,如果是基础数据类型,直接返回
    return type;
  }
  // 对于typeof返回结果是object的,再进行如下的判断,正则返回结果
  return Object.prototype.toString.call(obj).replace(/^\[object (\S+)\]$/, '$1'); 
}

getType([])     // "Array" typeof []是object,因此toString返回
getType('123')  // "string" typeof 直接返回
getType(window) // "Window" toString返回
getType(null)   // "Null"首字母大写,typeof null是object,需toString来判断

标签:instanceof,object,区别,Object,toString,typeof,call,prototype
From: https://www.cnblogs.com/wan-cb/p/17473623.html

相关文章

  • 常见机械键盘轴体的区别
     如果想要有段落感,则需要购买青轴或茶轴,青轴的声音非常大,会影响同事的办公。因此办公室或寝室建议不要选择青轴。茶轴是比较好的选择。红轴和黑轴没有段落感,直上直下的感觉。......
  • java——微服务——spring cloud——Nacos——Nacos与Eureka区别
        ......
  • 9.12 抽象类与接口的区别
    常见面试题No区别抽象类接口1.定义abstractclass抽象类名称interface接口名称2.组成构造,普通方法,静态方法,全局常量,成员抽象方法,全局常量,普通方法,static方法3.权限可以使用各种权限定义只可以使用public4.子类使用子类通过extends关键词可以继......
  • C++面试八股文:struct、class和union有哪些区别?
    C++面试八股文:struct、class和union有哪些区别?某日小二参加XXX科技公司的C++工程师开发岗位5面:面试官:struct和class有什么区别?小二:在C++中,struct和class的唯一区别是默认的访问控制。struct默认的成员是public的,而class的默认成员是private的。面试官:struct、class和unio......
  • 接口与抽象类的区别
    抽象类首先抽象类我们可以望文生义,是一个抽象的类,本质仍是类,那么他就应该具有类的特征,但是既然把他单独拎出来说明他肯定还有一些特殊性。1、继承了抽象类的类,要么本身也是抽象类,要么就实现类。2、抽象类也可以拥有普通方法3、抽象类不能创造对象接口接口是对行为的抽象,里面......
  • ESXi虚拟化的坑-细微区别下虚拟机性能差异巨大
    ESXi虚拟化的坑-细微区别下虚拟机性能差异巨大背景周末在公司无偿加班.同组的小伙伴周一有一个需求,我想着周六乘着机器压力不大进行一下虚拟机的clone但是截止到晚上快十点都没有完全Clone完.我感觉非常不对.然后突然想是不是硬件的bug导致性能有差异.想着最近总是在......
  • typeof方法
    使用typeof来计算变量那么会返回这个变量时那种类型的变量,是一个字符串,如下:leta="大萨达"typeofa//会输出String-------------------------letb=false;typeofb//会输出Boolean-------------------------letc=1;typeofb//会输出Number-------------------......
  • Vue 中const,var,let区别与用法
    区别:1.const定义的变量不可以修改,而且必须初始化。2.var定义的变量可以修改,如果不初始化会输出undefined,不会报错。3.let是块级作用域,函数内部使用let定义后,对函数外部无影响。......
  • fit、transform、fit_transform的区别和联系
    1.来源fit和transform没有任何关系,仅仅是数据处理的两个不同环节,之所以出来fit_transform这个函数名,仅仅是为了写代码方便,会高效一点。sklearn里的封装好的各种算法使用前都要fit,fit相对于整个代码而言,为后续API服务。fit之后,然后调用各种API方法,transform只是其中一个API方法,所......
  • 值传递与地址传递的区别
    值传递与地址传递的区别#include<stdio.h>intArrayCopy(char*ori,char*cop,charLength){charloop;for(loop=0;loop<Length;loop++){*cop++=*ori++;}return0;}intmain(){charoriginal[10]={1,2,3,4,......