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"是 true -
typeof能准确识别它们(typeof null是例外,返回"object",这是历史 bug)
引用数据类型:变量存的是地址,操作的是同一块堆内存
所有以 Object 为原型的类型都属于这一类,比如:Object、Array、Function、Date、RegExp、Map、Set、Promise 等。特点包括:
- 真实数据存在堆内存,变量在栈中只保存指向它的地址
- 赋值或传参时拷贝的是地址,多个变量可能指向同一个对象
- 可以随时增删属性、修改元素,是可变的
- 用
===比较时,比的是地址是否相同,[1] === [1]是 false -
typeof对多数返回"object"(函数例外,返回"function"),无法区分数组、日期等
怎么准确判断具体类型?别只靠 typeof
单用 typeof 容易踩坑(比如 null、[]、{} 都是 "object")。推荐组合使用:
十天学会易语言图解教程用图解的方式对易语言的使用方法和操作技巧作了生动、系统的讲解。需要的朋友们可以下载看看吧!全书分十章,分十天讲完。 第一章是介绍易语言的安装,以及运行后的界面。同时介绍一个非常简单的小程序,以帮助用户入门学习。最后介绍编程的输入方法,以及一些初学者会遇到的常见问题。第二章将接触一些具体的问题,如怎样编写一个1+2等于几的程序,并了解变量的概念,变量的有效范围,数据类型等知识。其后,您将跟着本书,编写一个自己的MP3播放器,认识窗口、按钮、编辑框三个常用组件。以认识命令及事件子程序。第
立即学习“Java免费学习笔记(深入)”;
-
typeof val:快速筛出基本类型(除 null)和 function -
val === null:单独判断 null(最直接安全) -
Array.isArray(val):专用于判断是否为数组 -
Object.prototype.toString.call(val):最可靠通用法,返回"[object Array]"、"[object Date]"等精确标识
一个容易忽略但影响深远的区别:null 和 undefined
它们都是“空”,但语义和来源完全不同:
-
undefined表示“还没给值”:变量声明未赋值、函数无 return、对象访问不存在属性时返回它 -
null表示“有意设为空”:开发者主动赋值,表示该处本应有对象,但现在清空了 - 两者用
==相等(null == undefined为 true),但===不等;typeof undefined是"undefined",typeof null却是"object"










