数据类型
JS的数据类型分为基础数据类型和引用数据类型
基础数据类型
- number
- string
- boolean
- undefined
- null
- symbol
- bigint
- 基础数据类型是一种没有任何方法的数据类型,即通过字面量创建的基础数据类型。通过new构造函数返回的是object。
- 对于基础数据类型调用方法或者给其属性赋值时,JS解释器会调用其对应的构造函数,对其进行包装(包装类),然后再调用原型对象上的方法。
- null和undefined没有包装类函数
- 通过new出来的基础数据类型,其valueOf方法就会返回其基础数据类型值
引用数据类型
- object
- map
- set
数据类型判断
typeof
typeof只能返回'number','string','boolean','undefined','symbol','bigint','function','object'这8种结果字符串,即无法分辨引用数据类型。null也返回true
null返回'object'的原因:
js的变量由类型标签和值组成,在二进制中占32bit,类型标签占1-3bit,对象的类型为000,而null指的是空指针,在计算机中表示为0x00,类型为0,则返回object
- 000 object
- 100 string
- 110 boolean
instanceof
instance instanceof Constructor 判断构造函数的原型是否在实例对象的原型链上,所以只能判断引用数据类型,而字面量创建的基础数据类型无法判断。例如 true instanceof Boolean 返回false。
===
undefined,null可以采用===判断
Object.prototype.toString.call
可以判断全部数据类型,即使window和DOM都可以判断。返回'[object Type]'。
isNaN/Number.isNaN
NaN是唯一一个不等于它本身的数据,全局方法isNaN(NaN)是用来判断数据是否是NaN的方法,ES6提供了Number.isNaN(NaN)的方法,其内部是
isNaN = function(value) {
// 先调用Number(value)尝试转为数字,如不能,则返回true
}
Number.isNaN = function(value) {
return typeof value === 'number' && isNaN(value)
}
Array.isArray
判断是否是数组
文档: