JavaScript有8种数据类型:7种原始类型(string、number、boolean、null、undefined、symbol、bigint)和1种引用类型(object)。关键在于理解值的存储、比较、传递方式及可变性,而非死记类型。

JavaScript 有 8 种数据类型:7 种原始类型(string、number、boolean、null、undefined、symbol、bigint)和 1 种引用类型(object,包括数组、函数、日期、正则、Map、Set 等)。正确使用的关键不是死记类型,而是理解“值怎么存、怎么比较、怎么传、会不会变”。
原始类型:按值操作,安全但别误判 null/undefined
原始类型存储的是实际的值,赋值或传参时复制一份,互不影响。但要注意几个经典坑:
-
null 是对象? 不是——
typeof null返回"object"是历史 bug,它本质是独立的原始类型,表示“空值”。判断时用value === null,别依赖typeof -
undefined 和未声明变量不同:
let a声明未赋值 →a是undefined;console.log(b)中b没声明 → 报错ReferenceError -
0、-0、NaN 要小心比较:
Object.is(-0, 0)返回false;NaN !== NaN,必须用Number.isNaN()判断 -
BigInt 不能和 number 混算:
1n + 1报错;需统一为1n + 1n或BigInt(1) + 1n
Object 类型:按引用传递,修改会影响原数据
数组、对象、函数等都属于 object(typeof [] 和 typeof {} 都是 "object"),它们在内存中存的是地址。赋值或传参时复制的是地址,不是内容:
- 想真正拷贝一个对象,用
{...obj}(浅拷贝)或structuredClone(obj)(深拷贝,支持多数内置类型) - 判断是否为纯对象,不用
typeof obj === "object"(null 也满足),改用obj !== null && typeof obj === "object" && !Array.isArray(obj) - 函数也是 object,所以可以动态加属性:
function f(){}; f.cache = {};—— 但不推荐污染函数实例
类型检测:别只靠 typeof,组合使用更可靠
typeof 对大部分原始类型有效,但对 null、数组、正则、日期都返回 "object"。实用组合方案:
标签: javascript java js 隐式转换 red
还木有评论哦,快来抢沙发吧~