本文系统梳理 JavaScript 的七种数据类型,重点解析 typeof 运算符的局限性及 null 的历史 Bug。通过 Object.prototype.toString.call() 和 constructor 属性,提供准确判断 Object、Array、Date 等引用类型的实用代码示例,帮助开发者掌握类型检测的核心技巧。
JavaScript 数据类型概述
JavaScript 拥有明确的数据类型体系。
基本数据类型包括:number、string、boolean、undefined、null、Symbol。
引用数据类型主要指 object。
需要注意的是,NaN 在类型上归属于 number;而 Function、Array、Date 等具体对象均属于 object 范畴。
typeof 运算符的局限性与 null 问题
使用 typeof 运算符可以判断除 null 以外的所有基本数据类型;对于引用数据类型,除 Function 外,其他均返回 object。
let a = 1,
b = '2',
c = true,
d = undefined,
e = null,
f = Symbol('f'),
g = function () {},
h = [],
i = new Date()
console.log(typeof a)
console.log(typeof b)
console.log(typeof c)
console.log(typeof d)
console.log(typeof e)
console.log(typeof f)
console.log(typeof g)
console.log(typeof h)
console.log(typeof i)
观察以下代码的输出结果。

从结果可见,typeof null 返回 object,这被视为 JavaScript 历史遗留的 Bug。若对此感兴趣,可查阅《The history of “typeof null”》一文了解详情。
null 的准确判断方法
针对 null 的判断,可采用以下方法。
function checkNull(num) {
return num === null
}
引用类型的精确识别技巧
若要获取 object 的具体子类型,应使用 Object.prototype.toString.call() 方法。
function checkObject(obj) {
return Object.prototype.toString.call(obj)
}
console.log(checkObject(g))
console.log(checkObject(h))
console.log(checkObject(i))
查看上述方法的输出结果。

此外,还可以利用构造函数的 constructor 属性进行类型判断。
console.log(g.constructor === Function)
console.log(h.constructor === Array)
console.log(i.constructor === Date)
观察构造函数判断的输出结果。

总结。
至此,关于 JavaScript 数据类型及其判断方法的介绍完毕。如需了解更多相关技术内容,请搜索本站往期文章或继续阅读后续系列文章,感谢大家的支持!