关于js引用类型和基本类型

2019-01-22  本文已影响0人  18dian

基本类型: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
上一篇 下一篇

猜你喜欢

热点阅读