JavaScript有8种数据类型:7种原始类型(string、number、boolean、null、undefined、symbol、bigint)和1种引用类型(object);判断类型需结合typeof(快但有局限)、Object.prototype.toString.call(最精准)、Array.isArray等方法。

JavaScript 有 8 种数据类型:7 种原始类型(primitive)和 1 种引用类型(object)。判断变量类型主要靠 typeof、instanceof、Object.prototype.toString.call() 和 Array.isArray() 等方法,但每种方法都有适用边界,需结合使用。
JavaScript 的 8 种数据类型
原始类型(值类型,按值访问):
-
string:如
"hello" -
number:如
42、3.14、NaN、Infinity -
boolean:如
true、false -
null:空值,是独立类型(但
typeof null返回"object",属历史 bug) - undefined:未赋值或未声明变量的默认值
- symbol(ES6):唯一且不可变的值,常用于对象属性键
-
bigint(ES2020):表示任意精度整数,如
123n
引用类型(按引用访问):
-
object:包括普通对象、数组、函数、日期、正则、Map、Set、Promise 等——它们底层都是
Object的实例,但语义和行为不同
用 typeof 判断基础类型(简单但有局限)
typeof 最快最常用,适合快速区分原始类型和函数,但对 null、数组、正则等返回不准确结果:
十天学会易语言图解教程用图解的方式对易语言的使用方法和操作技巧作了生动、系统的讲解。需要的朋友们可以下载看看吧!全书分十章,分十天讲完。 第一章是介绍易语言的安装,以及运行后的界面。同时介绍一个非常简单的小程序,以帮助用户入门学习。最后介绍编程的输入方法,以及一些初学者会遇到的常见问题。第二章将接触一些具体的问题,如怎样编写一个1+2等于几的程序,并了解变量的概念,变量的有效范围,数据类型等知识。其后,您将跟着本书,编写一个自己的MP3播放器,认识窗口、按钮、编辑框三个常用组件。以认识命令及事件子程序。第
立即学习“Java免费学习笔记(深入)”;
-
typeof "abc"→"string" -
typeof 42→"number" -
typeof true→"boolean" -
typeof undefined→"undefined" -
typeof function(){}→"function" -
typeof null→"object"(⚠️经典陷阱) -
typeof []→"object"(不是"array") -
typeof /[0-9]/→"object" -
typeof Symbol()→"symbol" -
typeof 123n→"bigint"
用 Object.prototype.toString.call() 精准识别内置对象类型
这是最可靠的方式,能区分所有内置对象的具体种类:
-
Object.prototype.toString.call([])→"[object Array]" -
Object.prototype.toString.call({})→"[object Object]" -
Object.prototype.toString.call(new Date())→"[object Date]" -
Object.prototype.toString.call(/abc/)→"[object RegExp]" -
Object.prototype.toString.call(null)→"[object Null]" -
Object.prototype.toString.call(undefined)→"[object Undefined]" -
Object.prototype.toString.call(new Map())→"[object Map]"
可封装成工具函数:
const typeOf = (val) => Object.prototype.toString.call(val).slice(8, -1).toLowerCase();
typeOf([1,2]) // "array"
typeOf(new Date()) // "date"
其他实用判断方式
-
数组:优先用
Array.isArray(arr)(最标准、兼容好) -
函数:用
typeof fn === "function"(简洁可靠) -
null:单独用
val === null(不能依赖typeof) -
对象(非 null):可用
val !== null && typeof val === "object" && !Array.isArray(val) -
Promise:检查
val && typeof val.then === "function" && typeof val.catch === "function",或更稳妥地用val instanceof Promise(注意跨 iframe 可能失效)










