美文网首页
JS数组与对象赋值问题

JS数组与对象赋值问题

作者: alokka | 来源:发表于2020-03-18 18:30 被阅读0次

    最近有群友遇到一个问题 就是给数组赋值遇到的一些问题 正好自己也不了解 就去网上查了一些资料 在这里做一下总结

    问题1:

    把 a 赋值给 b ,改变 b 的值发现 a 的值也被改变了,这和我们想象的不一样,为什么呢?

    // 1. 数组
        var a = [1,2];
        var b = a;
        b[0] = 3;
        console.log(a);
        // [3,2]
    
    // 2. 对象
        var a = {
            name: 'mina',
            age: '16'
        }
        var b = a;
        b.name = 'lokka';
        console.log(a); 
        // {
        //  name: 'lokka',
        //  age: '16'
        // }
    

    ——这是因为数组、对象、函数等都是引用类型

    JS分两种数据类型:
        基本数据类型:NumberStringBooleanNullUndefinedSymbol(ES6),这些类型可以直接操作保存在变量中的实际值。
        引用数据类型:Object(在JS中除了基本数据类型以外的都是对象,数据是对象,函数是对象,正则表达式是对象)

    把 a 赋值给 b ,就相当于把 a 的内存地址指向 b ,即 a 和 b 指向同一内存地址, 改变了 b 就相当于改变了 a

    在这里插入图片描述
    问题2:

    用 es6 的扩展运算符 来赋值就不会改变原数组,这又是为什么呢?

        var a = [1,2];
        var b = [...a];
        b[0] = 3;
        console.log(a);// [1,2]
    

    ——这是因为,扩展运算符相当于遍历了数组 a 的值,所以b 是一个新的数组,内存地址不是同一个,所以改变 b 不会影响数组 a


    在这里插入图片描述

    相关文章

      网友评论

          本文标题:JS数组与对象赋值问题

          本文链接:https://www.haomeiwen.com/subject/xnmcyhtx.html