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

问题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
JS数组与对象赋值问题-小白菜博客
问题2:

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

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

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