typeof 返回类型字符串但存在陷阱:null误判为"object",数组/正则/date等均返回"object";应结合array.isarray()、instanceof或object.prototype.tostring.call()精准识别。

typeof 是 JavaScript 中用于检测变量数据类型的运算符,它返回一个表示类型名称的字符串。使用简单,但有几个关键细节必须注意,否则容易误判。
基本用法和常见返回值
对任意值使用 typeof,会返回以下字符串之一:
- "undefined":变量未声明或值为 undefined
- "boolean":布尔值 true 或 false
- "number":数字(包括 NaN 和 Infinity)
- "string":字符串
- "symbol":ES6 新增的原始类型
- "bigint":ES2020 新增的大整数类型(如 123n)
- "function":函数(注意:箭头函数也返回 "function")
- "object":对象、数组、null、正则表达式、日期等(⚠️这是最易出错的地方)
特别注意:null 的陷阱
typeof null === "object" 是 JavaScript 的历史遗留 bug,至今未修复。这意味着:
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
- 不能单靠 typeof 区分 null 和普通对象
- 检测是否为 null,应直接用 value === null
- 检测是否为纯对象(非 null、非数组、非其他内置对象),需结合 Object.prototype.toString.call()
数组和内置对象的识别问题
数组、正则、Date、Map 等都返回 "object":
- typeof [] → "object"
- typeof /abc/ → "object"
- typeof new Date() → "object"
- 要准确判断,推荐:Array.isArray(arr) 判数组;value instanceof RegExp 判正则;或统一用 Object.prototype.toString.call(value) 获取精确类型标识(如 "[object Array]")
实际检测建议(兼顾安全与简洁)
日常开发中可按需组合判断:
- 判断原始类型(除 null):直接用 typeof x === "string" 等
- 判断是否为函数:用 typeof fn === "function"(兼容性好)
- 判断是否为 null:单独写 x === null
- 判断是否为数组:优先用 Array.isArray(x)
- 需要完整类型名时:用 Object.prototype.toString.call(x).slice(8, -1).toLowerCase()(例如得到 "array"、"date")










