JS中的数据类型
基本数据类型
- number
- 正数、负数、零、小数
- NaN not a number,不是一个有效数字,但是属于number类型
- Infinity:无穷大的值,也是number类型的
- string
- 在JS中用 单引号/双引号/反引号 包起来的都是字符串
- boolean
- true
- false
- null
- undefined
- symbol
- 创建的值是唯一的
- bigint
引用数据类型
- 对象数据类型
–{} 普通对象
–[] 数组对象
–/^?/ 正则对象
– date 日期
–math 数学函数- 函数对象类型 function
那么如何检测数据类型呢?
JS中的数据类型检测:
- tyepof [value] 检测数据类型的运算符
- [example] instanceof [class] 检测某一个实例是否属于这个类
- [example].constructor===[class] 检测实例和类关系的,从而检测数据类型
- Object.prototype.toString.call([value]) 检测数据类型
- typeof的细节点:
- typeof 检测的结果首先是一个字符串,字符串中包含了对应的数据类型(例如:“number”、“string”、“boolean”、“undefined”、“object”、“function”、“symbol”、“bigint”)
- 特殊的检测结果:
- NaN / Infinity 都是数字类型的,检测出来的结果是 “number”
- typeof null 的结果是 “object”(这个是浏览器的BUG:所有的值在计算中都已二进制编码存储,浏览器中把前三位是000的当做对象,而null的二进制前三位就是000,所以被识别为对象,但是它不是对象,它是空对象指针,是基本类型值)
- typeof 普通对象/数组对象/正则对象… 结果都是"object",这样就无法基于typeof区分是普通对象还是数组对象等了
搞两个题理解一下吧
console.log(typeof []); //=>"object"
console.log(typeof typeof typeof []); //=>"string" 由于typeof返回的结果永远是一个字符串(字符串中包含了对应的类型),所以连续出现两个及两个以上typeof检测的时候,最后结果都是 "string"