基本类型:number、string、boolean、null、undefined;
引用类型:object;
1.基本类型值的复制
<script>
var a = 10;
// 将a的值赋值给b;
var b = a;
// 重新给b赋值
var b = 20;
// 分别打印a和b;
console.log(b);
console.log(a);
</script>
打印结果:
20190122173831.png
上述代码中,可以看出全局变量a和b是完全独立的两个变量,因为在重新为b赋值时,并没有影响到a的值,实际上,这里涉及到栈内存和堆内存,基本类型的复制只发生在栈内存中,如下图所示:
timg.jpeg相当于全局变量中最开始只有a,然后我们用a去初始化b,在全局对象中增加了一个变量b,b只是保存了a复制的一个副本;
补充:基本类型是按值操作,操作的是保存在变量中实际的值,并且无法为基本类型的值动态的添加属性;
2.引用类型
javascript不能像其他语言一样,不能操作对象所在的内存空间,也就是堆内存,所以我们实际操作的是对象的引用而不是实际的对象;
看下面例子:
<script>
var a = {
name: '李林檀'
};
var b = a;
b.name = 'llt';
console.log(a.name,b.name)
</script>
打印结果为:llt llt
打印结果可见,我们对b对象的修改影响到了a,也称浅拷贝,实际上,当我们用a去初始化b的时候,在栈内存中,保存的是一个地址,这个地址的指向并没有改变,a和b在栈内存中保存的是同一个地址,所以,当我们操作b的时候,a也就受到了影响,如下图所示:
20190122180204.png
网友评论