一.JS中的数据类型检测(4种方式)
+ typeof[value] 检测数据类型的运算符
+ [example] instanceof [class] 检测某一个实例是否属于这个类
+ [example].construct===[class] 检测实例和类关系的,从而检测数据类型
+ Object.prototype.toString.call([value]) 检测数据类型
二.typeof的细节点:
1. typeof 检测的结果首先是一个字符串,字符串中包含了对应的数据类型
2. 特殊的检测结果:
NaN / Infinity 都是数字类型的,检测出来的都是"number"
typeof null 的结果是"object"(这个是浏览器的bug,所有的值在计算中都以二进制存储,浏览器把前三位是000的当做对象,而null的前三位就是000,所以被识别为对象,但是它不是对象,是空对象指针,是基本类型值)
typeof 普通对象/数组对象/正则对象/日期对象...结果都是"object",这样就无法基于typeof区分是普通对象还是数组对象等(缺点)
3.例题
console.log(typeof[ ]);//"object",必须加" "
console.log(typeof typeof typeof[ ]); //"string"由于typeof返回的结果永远是一个字符串(字符串中包含了对应的类型),所以连续出现两个及两个以上typeof检测的时候,最后结果都是"string"
例题,判断x的数据类型,进行操作
//已知有一个变量x,我们无法确定其数据类型,我们需要有一个判断操作,当x的类型是对象的时候(什么对象都可以),则处理对应的事情
if(typeof x == "object"){//这种方法不可以,因为null检测的结果也是"object",所有结果是"object"的,不一定是对象,还有可能是null}
应该这样写:
if(x != null && typeof x == "object"){}