Javascript的基本数据类型有哪些?它们的特点是什么?

JavaScript 中有 6 个基本数据类型:

  • String:字符串,用于表示文本内容
  • Number:数字,用于表示整数或浮点数
  • Boolean:布尔值,表示逻辑真假,只有 true 和 false 两个值
  • Null:空值,表示一个为空的值
  • Undefined:未定义,表示一个变量没有被赋值
  • Symbol:符号,ES6 中新增,用于创建唯一标识符

它们的主要特点是:

  1. 存储在栈(stack)中,占用空间小,访问速度快
  2. 直接操作改变的是值,不会影响原变量
  3. 传递参数时以值的方式传递(值拷贝)

例如:

let a = 1;        // Number 
let b = 'hello';  // String
let c = true;     // Boolean
let d = null;     // Null 
let e;            // Undefined
let f = Symbol(); // Symbol

a = 2;         // a 变为 2,不影响其他变量
b = 'hi';       // b 变为 'hi',不影响其他变量

func(a);      // 将 a 的值 1 传给形参
a             // 仍为 2,不受函数内改变的影响

相比之下,引用类型(Object、Array 等)的特点是:

  1. 存储在堆(heap)中,占用空间大,访问速度相对慢
  2. 操作改变的是内存中的值,会影响原变量
  3. 传递参数时以引用的方式传递

例如:

let obj = {a: 1};     // 对象是引用类型

obj.a = 2;            // 改变的是原对象,obj 也变为 {a: 2}

func(obj);            
obj.a                   // 如果函数内改变了属性值,这里可以看到改变后的结果 

所以总结来说:

  • 基本数据类型存储在栈中,传递参时为值传递,操作改变值本身。
  • 引用数据类型存储在堆中,传递参时为引用传递,操作改变内存中的值。