JS数据类型检测typeof、instanceof、constructor、Object.prototype.toString.call()的区别

本文详细介绍了JavaScript中用于数据类型检测的四种方法:typeof、instanceof、constructor和Object.prototype.toString.call()。其中,typeof能检测原始值类型和函数类型,但不能区分对象类型;instanceof和constructor可以细分部分对象类型,但受到原型链重构的影响可能不准确;Object.prototype.toString.call()方法通常能提供最准确的结果。
摘要由CSDN通过智能技术生成

数据类型检测的四种方式

typeof

不能细分对象类型的值,都是返回“object”,函数检测返回“function”。
typeof 10:number
typeof new Number(10):object
typeof true:boolean
typeof new Boolean(true):object
typeof “aaa”:string
typeof new String(“aaa”):object
typeof null:object

  • 底层原理:
    typeof是按照“值”在计算机中存储的二进制值来检测的,凡是以000开始的都认为是对象(null:00000)。
    优点:检测原始值类型和函数类型方便。

instanceof

原本是检测某个对象是否是某个类的实例,临时拉来做数据类型检测,弥补typeof的一些不足,可以细分部分对象。
let arr = [];
arr instanceof Array

  • 底层原理
    arr instanceof Array,首先查找arr[Symbol.hasInstance]是否存在,如果存在基于这个检测Array[Symbol.hasInstance](arr)。如果没有则基于原型链__proto__查找,只要Array.protoType出现在arr的原型链上
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值