JavaScript数据类型共8种,含7种基本类型(String、Number、Boolean、undefined、null、Symbol、BigInt)和1种引用类型(Object);基本类型值存栈、不可变、赋值拷贝值、===比值;引用类型变量存栈中地址、数据存堆、可变、赋值拷贝地址、===比地址;判断类型需组合typeof、Array.isArray()和Object.prototype.toString.call()。
JavaScript 数据类型共 8 种,分为7 种基本类型和1 种引用类型(Object)。区分它们的关键不在“叫什么”,而在存储方式、可变性、复制行为和比较逻辑——这些直接决定代码运行时的表现。
包括:String、Number、Boolean、undefined、null、Symbol、BigInt。它们共同特点是:
=== 比较时,比的是值本身,"a" === "a" 是 truetypeof 能准确识别它们(typeof null 是例外,返回 "object",这是历史 bug)所有以 Object 为原型的类型都属于这一类,比如:Object、Array、Function、Date、RegExp、Map、Set、Promise 等。特点包括:
=== 比较时,比的是地址是否相同,[1] === [1] 是 falsetypeof 对多数返回 "object"(函数例外,返回 "function"),无法区分数组、日期等单用 typeof 容易踩坑(比如 null、[]、{} 都是 "object")。推荐组合使用:
typeof val:快速筛出基本类型(除 null)和 functionval === null:单独判断 null(最直接安全)Array.isArray(val):专用于判断是否为数组Object.prototype.toString.call(val):最可靠通用法,返回 "[object Array]"、"[object Date]" 等精确标识它们都是“空”,但语义和来源完全不同:
undefined 表示“还没给值”:变量声明未赋值、函数无 return、对象访问不存在属性时返回它nul
l 表示“有意设为空”:开发者主动赋值,表示该处本应有对象,但现在清空了== 相等(null == undefined 为 true),但 === 不等;typeof undefined 是 "undefined",typeof null 却是 "object"