关于检测数据类型的方法

1、typeof用来检测数据类型的运算符
在这里插入图片描述
依据上图清晰可见typeof检测数据类型包括:“number”、“string”、“undefined”、“function”、"object"

typeof数据监测局限性:
typeof null ====》“object”
不能具体细分是数组还是正则,还是对象中其他值,因为使用typeof检测数据类型,对于对象数据类型中的值,最后返回的结果都是"object"

2.instanceof 检测某一个实例是否属于某个类

 let d = {
    name:"cyy"
 }
 console.log(d instanceof Object) // true

局限性:
对于基本数据类型而言,字面量方式创建出来的结果和实例方式创建出来的结果是有一定的区别的。从严格意义上讲,只有实例创建出来的结果才是标准的对象数据类型值,也是标准的Number这个类的一个实例;对于字面量方式上创建出来的结果是基本的数据类型值,不是严谨的实例,但是由于JS的松散特点,导致了可以使用Number.prototype上的方法。
A.不能用来检测和处理字面量方式创建出来的基本数据类型值

console.log(0 instanceof Number) // false
console.log(new Number(0) instanceof Number) // true

B.instanceof的特性:只要在当前实例的原型链上,我们用其检测的结果都为true

let c = [0,1,3,4]
console.log(c instanceof Array,c instanceof Object) //true true
let h = function fn(){}
console.log(h instanceof Function,h instanceof Object)//true true
    

3.constructor构造函数作用和instanceof非常相似 constructor可以处理基本数据类型的检测
constructor检测Object和instanceof不一样一般情况下是检测不了的

 let a = 0;
console.log(a.constructor === Number)//true
let c = [0,1,3,4]
console.log(c.constructor ===  Array) // true

局限性:我们可以把类的原型进行重写,在重写的过程中很有可能出现把之前的constructor给覆盖掉了,这样检测出来的结果就不准确了。
对于特殊的数据类型null和undefined,他们所属的类是Null和Undefined,但是浏览器把这两个类保护起来了,不允许我们在外面访问使用。
4、Object.prototype.toString.call()最准确最常用的方式 各种类型的都可以检测(基本和引用)
首先获取Object原型上的toString方法,让方法执行,并且改变方法中的this关键字的指向
toString的理解:
表面上看应该是转化成字符串,但是某些toString方法不仅仅是转化为字符串
对于Number、String、Boolean、Array、RegExp、Date、Function原型上的toString方法都是把当前的数据类型转化为字符串的类型(他们的作用仅仅是用来转换为字符串的)
Object.prototype.toString()并不是用来转化为字符串的,他的作用是返回当前方法执行主体(方法中的this)所属类的详细信息。

console.log(({name:"cyy"}).toString())//[object object]
console.log(Math.toString())//[object Math]

let obj = {
    name:"yy"
}

console.log(obj.toString())//[object object]
//toString中的this是obj,返回的是obj所属的类的信息。[object Object] 第一个object代表当前实例是对象数据类型的(这个是固定的),第二个Object代表的是obj所属的类是Object 

console.log((1).toString())// "1" Number.prototype.toString转化为字符串
console.log((128).toString(2))//参数2或8或10,表示把数字转化为2进制、8进制、10进制
 
let arr = [];
console.log(Object.prototype.toString.call(arr))//[object Array]   
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值