Skip to content

JavaScript 数据基础

原始类型和对象

原始类型存储在调用栈中,对象存储在堆中。

原始类型的存储

js
let age = 30; // 拿出一块存储区装 age 的值
let oldAge = age; // oldAge 指向 age 所在的存储区
age = 31; // 拿出一块新的存储区给 age 的值

对象的存储

对象赋给的变量的 identifier 存储在调用栈中,其值是一个地址,改地址指向中的地址,堆中存储着对象本身。

TIP

canst 声明的变量是不可变的这句话是错误的,正确的应该为 const 声明的原始类型的变量不可变。

可以使用 Object.assign(target, source) 来进行一层浅拷贝,如:

js
const me = {
    name: 'jonas',
    age: 30,
};

const meCopy = Object.assign({}, me); // 第一级对象拷贝

meCopy.name = 'jiaqi';

console.log('me name before', me.name); // jonas
console.log('me name now', meCopy.name); // jiaqi

用这种方式可以实现真正在堆中建立一个新的区域来存储新的对象,但仍然存在问题:无法拷贝其中的对象,也就是 Object.assign() 实现的是浅拷贝,即一层级的拷贝,而没有实现深拷贝。

数据结构的选择

数据可能的来源:

  1. 来自程序本身
  2. 来自 UI:用户的输入或 DOM
  3. 来源于外部:比如 Web API