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

基本类型: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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容