近来做的一个项目中出现了,var result = data.data//data.data 为数组,结果更改了result的值导致data的属性直接发生变化,后查阅资料发现js数组其实为引用类型。
js的赋值分类如下:
(1)值类型:数值、布尔值、null、undefined。
(2)引用类型:对象、数组、函数。
一、值类型-例子:
var b='text';
var a = b;
b = 'textb';
a = 'texta';
alert(a); //texta
alert(b); // textb
值类型,即为直接传递数值,重新分配新的存储空间,因此a,b互不影响。
二、引用类型
请看下面知乎上的一个例子:
var a = [1,2,3];
var b = a;
a = [4,5,6];
alert(b); //[1,2,3]
var a = [1,2,3];
var b = a;
a.pop();
alert(b); //[1,2]
var a = [1,2,3];
var b = a;
a[0] = 111;
alert(b); //[111,2,3]
从这里我们看出,数组的赋值b=a其实是:令b指向,a所指向的“数组对象”。
a = [4,5,6],实质上是直接改变a本身引用的“数组对象”,则不会对原本指向的[1,2,3]“数组对象”产生影响,因此b也不会发生变化。
a[0] = 111或者a.pop();会影响[1,2,3]这个“数组对象”,所以会影响b。
图片作者:Intopass
链接:https://www.zhihu.com/question/26042362/answer/31903017
来源:知乎