数据类型检测的四种方式
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的原型链上,返回结果就是true。
arr[Symbol.hasInstance]
Array[Symbol.hasInstance](arr)
arr.proto == Array.prototype
缺点:
1.不能检测原始值类型;
2.原型链可以重构,导致结果不准确;

本文详细介绍了JavaScript中用于数据类型检测的四种方法:typeof、instanceof、constructor和Object.prototype.toString.call()。其中,typeof能检测原始值类型和函数类型,但不能区分对象类型;instanceof和constructor可以细分部分对象类型,但受到原型链重构的影响可能不准确;Object.prototype.toString.call()方法通常能提供最准确的结果。
最低0.47元/天 解锁文章
2313





