JavaScript中基本类型不可变、赋值复制值、比较看内容;引用类型可变、赋值复制地址、比较看内存位置;基本类型7种(含null),其余为引用类型。

区分 JavaScript 中的基本类型和引用类型,关键看三点:值能不能直接改、赋值时是复制值还是复制地址、比较时比的是内容还是位置。
看能不能添加属性或修改原值
基本类型一旦创建就不可变,强行“改”其实是生成新值。比如:
- let s = "abc"; s.age = 18; console.log(s.age); // undefined
- let n = 42; n.toString = () => "fake"; console.log(n.toString()); // 还是原始方法
引用类型可以随时增删改属性:
- let obj = {}; obj.name = "Alice"; console.log(obj.name); // "Alice"
- let arr = [1, 2]; arr.push(3); console.log(arr); // [1, 2, 3]
看赋值后两个变量是否互相影响
基本类型赋值是“各拿一份”:
- let a = 100; let b = a; b = 200; console.log(a); // 100(没变)
引用类型赋值是“共用一个”:
- let x = {id: 1}; let y = x; y.id = 999; console.log(x.id); // 999(跟着变了)
看 typeof 和 instanceof 的返回结果
基本类型用 typeof 能准确识别(除 null 是历史 bug):
- typeof 42 → "number"
- typeof "hi" → "string"
- typeof true → "boolean"
- typeof undefined → "undefined"
- typeof Symbol() → "symbol"
- typeof null → "object"(注意:这是 JS 早期设计失误)
引用类型中,typeof 对大多数都返回 "object",得靠 instanceof 或 Object.prototype.toString.call() 细分:
- typeof [] → "object"
- [] instanceof Array → true
- Object.prototype.toString.call([]) → "[object Array]"
快速记忆清单
- 基本类型共 7 种:Number、String、Boolean、undefined、null、Symbol、BigInt
- 其余全是引用类型:Object、Array、Function、Date、RegExp、Map、Set、Promise、自定义类实例等
- null 是特例:语义上表示“空对象引用”,但 typeof 返回 "object",实际属于基本类型
- 函数也是对象:所以 typeof function(){} === "function" 是 typeof 的特殊返回,不影响它本质是引用类型
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











