JavaScript有哪些主要数据类型?
更新时间
JavaScript的主要数据类型分为两大类:原始类型(Primitive Types)和引用类型(Reference Types)。原始类型包括7种:Undefined、Null、Boolean、Number、String、Symbol(ES6新增)和BigInt(ES2020新增)。引用类型主要指Object,它又细分为普通对象、数组、函数、日期、正则等。
原始类型与引用类型的核心区别在于存储和赋值方式。原始类型直接存储值,赋值时是值的拷贝,比较时比较值本身。例如 let a = 5; let b = a; b = 10; 此时a仍为5,b为10,两者互不影响。引用类型存储的是内存地址,赋值时拷贝的是引用(即地址),多个变量可能指向同一对象。例如 let obj1 = {x: 1}; let obj2 = obj1; obj2.x = 2; 此时obj1.x也变为2,因为obj1和obj2指向同一个对象。
各原始类型的具体含义如下:Undefined表示变量已声明但未赋值;Null表示空值或对象不存在;Boolean只有true和false两个值;Number涵盖整数和浮点数,也包括Infinity和NaN(非数字);String是UTF-16编码的字符序列;Symbol用于创建唯一标识,常作对象属性键;BigInt用于表示任意精度的整数,写法如 123n。
判断数据类型有几种常用方法:typeof 运算符最适合区分原始类型,但它对null会返回"object"(这是历史遗留bug),对函数返回"function"。Object.prototype.toString.call() 是更精确的方法,能区分数组、日期、正则等具体引用类型,例如对数组返回"[object Array]"。Array.isArray() 专门用于判断是否为数组。
一个容易混淆的点是:typeof null 返回"object",但null本身是原始类型而非对象。另一个常见误区是把数组当作独立类型,实际上数组属于Object的子类型。理解这些类型及差异是掌握JavaScript变量操作、深拷贝浅拷贝、类型转换等进阶概念的基础。