JavaScript中datatypes的两个基本组

78 阅读3分钟

JavaScript中datatypes的两个基本组

在 JavaScript 中,数据类型(Data Types)可以分为两大类:原始类型(Primitive Types)引用类型(Reference Types)。以下是它们的详细说明及区别:

1. 原始类型(Primitive Types)

原始类型是 JavaScript 中最基本的数据类型,它们的值直接存储在变量中。原始类型是不可变的(Immutable),即它们的值不能被修改,只能被替换。

常见的原始类型

类型描述示例
string字符串"Hello", 'World'
number数字(整数或浮点数)42, 3.14
boolean布尔值(truefalsetrue, false
null空值null
undefined未定义的值undefined
symbol唯一标识符(ES6 新增)Symbol("id")
bigint大整数(ES2020 新增)123n

特点

  • 不可变性:原始类型的值不能被修改。
  • 按值传递:在赋值或传递时,复制的是值本身。
  • 存储位置:存储在栈内存中。

示例

let a = 10;
let b = a; // b 是 a 的副本
a = 20;
console.log(b); // 输出: 10(b 的值未受影响)

2. 引用类型(Reference Types)

引用类型是复杂的数据类型,它们的值存储在堆内存中,变量存储的是指向堆内存的引用(地址)。引用类型是可变的(Mutable),即它们的值可以被修改。

常见的引用类型

类型描述示例
object对象{ name: "Alice", age: 25 }
array数组[1, 2, 3]
function函数function() {}
date日期对象new Date()
regexp正则表达式/abc/

特点

  • 可变性:引用类型的值可以被修改。
  • 按引用传递:在赋值或传递时,复制的是引用(地址)。
  • 存储位置:存储在堆内存中。

示例

let obj1 = { name: "Alice" };
let obj2 = obj1; // obj2 和 obj1 指向同一个对象
obj1.name = "Bob";
console.log(obj2.name); // 输出: Bob(obj2 的值被修改)

3. 原始类型与引用类型的区别

特性原始类型引用类型
存储方式直接存储值存储引用(地址)
可变性不可变可变
赋值/传递按值传递(复制值)按引用传递(复制引用)
存储位置栈内存堆内存
比较方式比较值是否相等比较引用是否相等

示例

// 原始类型比较
let a = 10;
let b = 10;
console.log(a === b); // true(值相等)

// 引用类型比较
let obj1 = { name: "Alice" };
let obj2 = { name: "Alice" };
console.log(obj1 === obj2); // false(引用不同)

4. 类型检测

  • 原始类型:使用 typeof 检测。
    console.log(typeof "Hello"); // "string"
    console.log(typeof 42);      // "number"
    console.log(typeof true);    // "boolean"
    console.log(typeof null);    // "object"(历史遗留问题)
    console.log(typeof undefined); // "undefined"
    console.log(typeof Symbol("id")); // "symbol"
    console.log(typeof 123n);    // "bigint"
    
  • 引用类型:使用 typeof 检测对象和函数,使用 instanceof 检测具体类型。
    console.log(typeof {});      // "object"
    console.log(typeof []);      // "object"
    console.log(typeof function() {}); // "function"
    
    console.log([] instanceof Array); // true
    console.log({} instanceof Object); // true
    

总结

JavaScript 中的数据类型分为两大类:

  1. 原始类型stringnumberbooleannullundefinedsymbolbigint
  2. 引用类型objectarrayfunctiondateregexp

理解它们的区别对于掌握 JavaScript 的内存管理、赋值行为和类型检测至关重要。

更多vue相关插件及后台管理模板可访问vue admin reference,代码详情请访问github