JavaScript 中的数据类型可以分为两大类:基本数据类型(Primitive Types)和引用数据类型(Reference Types)。
基本数据类型
- Undefined - 表示一个未初始化的值。
- Null - 表示一个空值或不存在的对象。
- Boolean - 包含两个值:
true
和false
。 - Number - 用于表示整数或浮点数,还包括特殊值如
NaN
(非数字)和Infinity
。 - String - 字符串是由单引号、双引号或反引号包围的零个或多个字符组成的文本。
- Symbol (ES6 新增) - 表示独一无二的值,通常用来创建对象的唯一属性键。
- BigInt (ES11 新增) - 可以安全地存储比
Number
类型上限更大的整数。
引用数据类型
- Object - 包括普通对象
{}
、数组[]
、函数function(){}
等。
判断数据类型的方法
使用 typeof
操作符
typeof
是最常用的判断数据类型的手段,但它对一些类型返回的结果可能不是特别精确:
typeof undefined
返回"undefined"
typeof null
返回"object"
(这是一个历史遗留问题)typeof true
返回"boolean"
typeof 42
或typeof NaN
返回"number"
typeof 'blabla'
返回"string"
typeof Symbol()
返回"symbol"
typeof 1234567890123456789012345678901234567890n
返回"bigint"
typeof {a: 1}
返回"object"
typeof [1,2,3]
返回"object"
typeof function() {}
返回"function"
使用 instanceof
instanceof
运算符用来测试某个构造函数的 prototype 属性所指向的对象是否存在另外一个要检测对象的原型链上。主要用于判断引用类型的具体类型,例如是否为数组或特定构造函数的实例。
[1, 2, 3] instanceof Array // true
使用 Array.isArray()
专门用来判断某个值是否为数组类型。
Array.isArray([1, 2, 3]) // true
使用 Object.prototype.toString.call()
这种方法可以准确地获取任何类型的全称字符串表示形式,适用于所有数据类型。
Object.prototype.toString.call(null) // "[object Null]"
Object.prototype.toString.call(42) // "[object Number]"
Object.prototype.toString.call('blabla') // "[object String]"
// etc.
这些方法各有优劣,根据实际需求选择最适合的一种或几种组合使用来判断JavaScript中的数据类型。