JS数组与对象赋值问题

2020-03-18  本文已影响0人  alokka

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

问题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


在这里插入图片描述
上一篇下一篇

猜你喜欢

热点阅读