近來做的一個項目中出現了,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
來源:知乎