最近有群友遇到一个问题 就是给数组赋值遇到的一些问题 正好自己也不了解 就去网上查了一些资料 在这里做一下总结
问题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分两种数据类型:
基本数据类型:Number
、String
、Boolean
、Null
、Undefined
、Symbol(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
在这里插入图片描述
网友评论