JS 之数据类型检测--四种方法

数据类型检测方式

typeof 

console.log(typeof true)   // Boolean
console.log(typeof  2)     //number
console.log(typeof  'abd')   //string
console.log(typeof [])   //object
console.log(typeof null)   //object
console.log(typeof undefined)   //undefined

数组 对象 null  通过这种方式检测 返回的结果都是Object  这不是我们想要的结果

instanceof

可以正确的判断对象的类型,其内部运行机制是判断在其原型链中能否找到该类型的原型

底层原理如下:

function instance_of(L,R){
  var O  = R.prototype;
  var L = L._proto_;
   while(true){
        if(O==null) return false;
        if(O==L)   return true     //L的隐式原型能在O的显式原型中找到
}
    
}

console.log(instance_of([],Array))

 左边L表示对象,右边R表示数据类型,判断依据就是:L的隐式原型能不能在O的原型上找到。

console.log(2 instanceof Number)                         //false
console.log('abc' instanceof String)                      //false

console.log([] instanceof Arrary)                     //true
console.log(function(){} instanceof Function);       // true
console.log({} instanceof Object);                   // true

instanceof不能用于检测基本数据类型,只能判断引用数据类型

容易混淆的是:

indexof  是用来检测数组元素的索引号的,返回结果就是该元素的索引号,如果没有该元素,就返回-1

constructor 

constructor 有两个作用,一是判断数据类型,而是对象实例通过它可找到它的构造函数

console.log((2) constructor == Number)  //true
console.log(([]) constructor == Array)   //true

Object.prototype.toString()

注意Object原型上的toString方法是用来判断数据类型的,而Object的实例对象 (自定义构造函数或者内置构造函数)在继承Object属性和方法时,toString()方法是被重写了的,也就是实例对象身上都能找到两个toString方法,一个是它的原型上的toString(),用来精准判断数据类型的,另一个toString就是自己身上被重写之后的方法,用于转化为字符串。

判断时,使用call来调用

Object.prototype.toString.call(检测对象)   -----  括号里的对象去调用这个方法

Object.prototype.toString.call(2)   //[object Number]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值