基本数据类型:number,string,boolean,null,undefined,symbol,BigInt
引用数据类型: object(普通对象,数组对象,正则对象,日期对象...) function
检测数据类型的方法:
+typeof value 检测数据类型的运算符
+[example] instanceof [class] 检测某一个实例 是否属于这个类
+[example].constructor === [class] 检测实例和类的关系,从而检测数据类型
+Object.prototype.toString.call(value) 检测数据类型
暂时只写 typeof
typeof的细节知识点
+typeof 检测的结果首先是一个字符串,字符串中包含了对应的 数据类型(例如:‘number’,'string','boolean','undefined','object','function','symbol','BigInt')
+特殊的检测结果
+ NaN / Infinity 都是数字类型的,检测出来 的结果是 ‘number’
+typeof null 的结果是 ‘object’(这个是浏览器的bug,所有的值在计算中都已二进制编码存储,浏览器中把前三位是000的当作对象,而null的二进制前三位就是000,所以被识别为对象,但是它不是对象,它是空对象指针,是基本类型值)
+typeof 普通对象/数组对象/正则对象...结果都是‘object’ 这样就无法基于typeof区分是普通对象还是数组对象等了
//百度腾讯面试题
typeof []; // => object
typeof typeof typeof []; // => typeof [] = 'object' => typeof 'object'
// => string => typeof 'string' => 'string'
// 由于typeof返回的结果永远是一个字符串(字符串中也包含了对应的类型),所以连续出现俩个及两个以上的
// typeof检测的时候,最后结果都是 'string'
已知有一个变量x,但是我们无法确认其数据类型,我们需要有一个判断操作;当x的数据类型是对象的时候
(什么对象都可以),则处理对应的事情
if(typeof x == 'object'){ // => null检测结果也会是 'object',所以结果是 'object' 不一定是对象
// 换可能是 null呢
// //..
}
if(x != null && typeof x == 'object'){
// ...
}