数据类型检测的四种方式
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的原型链上