数据类型、包装类、类型判断

95 阅读2分钟

数据类型

JS的数据类型分为基础数据类型和引用数据类型

基础数据类型
  • number
  • string
  • boolean
  • undefined
  • null
  • symbol
  • bigint
  1. 基础数据类型是一种没有任何方法的数据类型,即通过字面量创建的基础数据类型。通过new构造函数返回的是object。
  2. 对于基础数据类型调用方法或者给其属性赋值时,JS解释器会调用其对应的构造函数,对其进行包装(包装类),然后再调用原型对象上的方法。
  3. null和undefined没有包装类函数
  4. 通过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

判断是否是数组

文档:

The history of “typeof null”

NaN and Infinity in JavaScript