值类型和引用类型的值的存储特征,有图有真相 凡是定义变量就要开辟内存
var num; //不开辟内存,声明
var num = 123; //开辟内存
var num = [1,2,3]; //将数据存储在一个单位的内存中,该数组的地址给变量存起来
变量存的是数值本身就是值类型
值类型赋值特点:将变量内的数据全部拷贝一份,存储给新的变量。内存中有两个数据
var arr = [
{name:'张三',age:19},
{name:'张三',age:19},
{name:'张三',age:19}
]
值类型赋值内存逻辑图
var o = [name:’张三’];
var obj = o;
引用类型赋值的存储特点,将变量中的引用地址拷贝一份,存给新的变量。内存中只有一份数据。
问题:利用obj修改name:属性会影响到o中的name。
解决方案:深拷贝。(将在下一篇博客中详细讲解,这里就不赘述)
var car = {name:'法拉利'};
var p = {name:'张三',age:19,car:car};
引用类型值的存储内存逻辑图
var o ={
name:'张三',
age:19,
children:[
{name:'李四'},
{name:'王五'}
]
}
引用类型值的存储内存逻辑图