JavaScript有8种数据类型,分7种基本类型(Number、String、Boolean、Undefined、Null、Symbol、BigInt)和1种引用类型(Object);基本类型存栈、值拷贝,引用类型对象存堆、地址拷贝;判断类型首选Object.prototype.toString.call()。

直接说清数量、分类和关键区别,再配一个通用判断方法,面试官基本就点头了。
先说清楚有几种、分哪两类
JavaScript 一共有 8 种数据类型:7 种基本类型(Number、String、Boolean、Undefined、Null、Symbol、BigInt)和 1 种引用类型(Object)。注意 Null 是基本类型,但 typeof null === 'object' 是历史 bug,得主动提一句;BigInt 末尾带 n(比如 123n),不能和 Number 混用。
重点讲清栈和堆的区别
基本类型值直接存在栈内存里,复制时是完整拷贝一份;引用类型实际对象存在堆内存,变量在栈里只存一个地址,复制时拷的是这个地址——所以两个变量可能指向同一块堆内存,改一个另一个也跟着变。
常见例子:
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
-
let a = {x: 1}; let b = a;→ 改b.x = 2,a.x也变成 2 -
let c = 10; let d = c;→ 改d = 20,c还是 10
判断类型,优先推荐 Object.prototype.toString.call()
它最稳,能区分所有类型,包括 null、undefined、Array、Function 等:
-
Object.prototype.toString.call([])→"[object Array]" -
Object.prototype.toString.call(null)→"[object Null]" -
Object.prototype.toString.call(123)→"[object Number]"
不用 obj.toString(),因为数组、函数等都重写了它;typeof 快但不准(null、数组、正则都返回 'object');instanceof 只适合判断实例与构造函数关系,对基本类型无效。
补充两个高频细节
NaN 是 Number 类型,但不等于自身:NaN === NaN 为 false;判断用 Number.isNaN() 更可靠(比全局 isNaN() 更严格)。
typeof undefined 返回 'undefined',typeof null 返回 'object',这是 V8 引擎早期实现留下的兼容性问题,不是设计意图。

















