javascript数据类型分基本类型和引用类型:基本类型共7种,存于栈中、赋值复制值;引用类型本质是object,存于堆中、赋值复制地址;判断类型推荐object.prototype.tostring.call();类型转换需区分隐式与显式。

JavaScript 的数据类型其实就分两类:基本类型和引用类型。理解它们的关键不在于死记硬背,而在于搞清“值怎么存、怎么传、怎么判断”。下面从实际写代码的角度帮你理清楚。
基本类型:直接存值,改不了,也传不出变化
共 7 种:String、Number、Boolean、undefined、null、Symbol、BigInt。它们都存在栈内存里,内容固定、不可修改,赋值时复制的是值本身。
- 字符串用单引号、双引号或反引号都可以,但一旦创建,就不能改某个字符(比如 str[0] = 'H' 无效)
- Number 包含整数、小数、NaN(它属于 number 类型)、Infinity;注意 10 + '5' 会变成字符串 '105',这是隐式转换的典型表现
- null 和 undefined 都表示“空”,但语义不同:undefined 是变量声明了没赋值,null 是你主动设的“空对象占位符”
- Symbol 每次调用都是新值,适合做唯一属性名;BigInt 用 n 结尾(如 123n),专用于超大整数运算
引用类型:存地址,改一个,可能影响多个
本质只有一种:Object。数组(Array)、函数(Function)、日期(Date)、正则(RegExp)、Map、Set 等,全都是 Object 的子类或实例,存在堆内存中,变量里存的只是指向它的地址。
- 赋值时复制的是地址,所以 let a = {x: 1}; let b = a; b.x = 2; 后,a.x 也会变成 2
- 函数也是对象,所以 typeof function() {} 返回 "function",但它仍属于引用类型
- 数组看似特殊,但 typeof [] 是 "object",不能靠 typeof 判断是不是数组
怎么准确判断类型?别只信 typeof
typeof 对基本类型很管用,但遇到 null、[]、new Date() 就容易翻车——它们全返回 "object" 或 "function"。
- 判断数组:用 Array.isArray(arr)
- 判断日期:用 obj instanceof Date 或 Object.prototype.toString.call(obj) === '[object Date]'
- 通用安全法:Object.prototype.toString.call(value),它能返回精确的内部标签,比如 [object Array]、[object Null]
类型转换是日常高频操作,得知道什么时候发生
JS 经常自动转类型,比如 if 判断、== 比较、加号运算等。显式转换更可控:
- 转数字:用 Number()(严格)、parseInt()(截取整数)、parseFloat()(截取浮点)
- 转字符串:String(x) 或 x + ''
- 转布尔:Boolean(x) 或 !!x;记住只有 0、''、NaN、null、undefined、false 是假值
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











