# JavaScript教程 - 12 对象和数组补充
下面对数组和对象的一些内容做一下补充。
# 12.1 内存结构与拷贝
# 1 数组内存结构
数组是引用类型的,所以下面的代码:
let numbers = [1, 2, 3, 4, 5];
1
在内存中的结构是这样的:
numbers 变量是存储在栈中的,右边的数组值是存储在堆中的,栈中存储堆中的地址。
再看一段代码:
int [] numbers = new int[]{1, 2, 3, 4, 5};
numbers = [1, 2, 3];
1
2
2
上面的代码,重新将一个数组赋值给 numbers,内存结构如下:
numbers 被赋值为一个新的数组,那么存储的是新数组的地址,numbers 与新的数组建立关系,与原来的数组断开联系了。
# 2 浅拷贝
上面使用 slice()
拷贝数组,是浅拷贝,浅拷贝就是只复制一层。
举个栗子:
let persons = [{'name':'doubi'}, {'name':'niu'}];
let copyPersons = persons.slice();
1
2
2
内存结构如下:
当复制数组后,只是复制第一层,也就是数组中的内容。
所以此时两个数组指向的是相同的对象,修改数组会影响另一个数组:
console.log(persons[0] === copyPersons[0]); // true
persons[0].name = 'shabi';
console.log(copyPersons[0].name); // shabi
1
2
3
4
2
3
4
# 3 深拷贝
深拷贝就是所有的层都会复制,所以深拷贝内存结构如下:
内容未完......
← 11-函数进阶 13-字符串和正则表达式 →