JavaScript基础数据类型

JavaScript 的数据类型可以分为 原始类型(Primitive Types)引用类型(Reference Types) 两大类。


1. 原始类型(Primitive Types)

原始类型的值是不可变的(immutable),直接存储在栈内存中,按值传递。
共有 7 种 原始类型:

  1. number
    • 整数、浮点数(如 423.14)。
    • 特殊值:NaN(非数字)、Infinity(无穷大)。

  2. string
    • 文本数据(如 "hello")。
    • 使用单引号、双引号或反引号(模板字符串)。

  3. boolean
    • 逻辑值:truefalse

  4. undefined
    • 变量未初始化时的默认值(如 let a;)。

  5. null
    • 表示“空”或“无值”(需显式赋值,如 let a = null;)。

  6. symbol(ES6 新增)
    • 唯一且不可变的值(如 const id = Symbol("id");)。

  7. bigint(ES2020 新增)
    • 表示任意精度的整数(如 123n)。


2. 引用类型(Reference Types)

引用类型的值是可变的(mutable),存储在堆内存中,按引用传递。
常见的引用类型包括:

  1. object
    • 普通对象(如 { name: "Alice" })。
    • 数组([1, 2, 3])、函数(function() {})、日期(new Date())等本质也是对象。

  2. function(函数)
    • 可执行对象(如 function foo() {})。

  3. 其他内置对象
    ArrayDateRegExpMapSet 等。


关键区别

特性 原始类型 引用类型
存储方式 栈内存(直接存值) 堆内存(存地址引用)
可变性 不可变(值不可修改) 可变(属性可修改)
比较方式 按值比较(1 === 1 按引用比较({} !== {}
传递方式 按值传递(复制值) 按引用传递(共享地址)

示例代码

// 原始类型
let a = 42;          // number
let b = "hello";     // string
let c = true;        // boolean
let d = undefined;   // undefined
let e = null;        // null
let f = Symbol("id"); // symbol
let g = 100n;        // bigint

// 引用类型
let obj = { name: "Alice" }; // object
let arr = [1, 2, 3];         // array (本质是 object)
function foo() {}            // function

注意事项

  1. typeof 检测的陷阱
    typeof null 返回 "object"(历史遗留问题)。
    typeof function() {} 返回 "function"(尽管函数是对象)。

  2. 类型转换
    • 原始类型可通过 new String() 等包装对象转为引用类型,但通常不建议使用。

  3. ES6+ 新增类型
    Symbolbigint 是较新的类型,需注意兼容性。


总结

原始类型 7 种numberstringbooleanundefinednullsymbolbigint
引用类型:主要是 objectfunction(包括数组、日期等)。

posted @ 2025-03-31 21:58  理旻  阅读(76)  评论(0)    收藏  举报