鍍金池/ 問答/HTML/ js 對象深度拷貝問題

js 對象深度拷貝問題

1.js 對象和字符串深度拷貝問題
2.
var a = b = [];
a.push('1');
console.log(a,b); //[1],[1];
var a = b = 'hello';
a+= ' world';
console.log(a,b); //'hello world','hello';
為什么第一次 a和b 同時變化 第二次卻互不影響呢,求大神解答

回答
編輯回答
款爺

js的對象和字符串是不一樣的。對象是存在于堆空間,第一次的a和b相當(dāng)于是引用這個堆空間,所以改變a也就是改變了堆空間的內(nèi)容,自然b也跟著發(fā)生改變。而js的基本類型比如Number,string,boolean這些的,都是直接放在棧內(nèi)存中,聲明一個a就會有對應(yīng)的一個a的值,也就是說第二個的a和b是完全兩個東西沒有一點聯(lián)系,僅僅是第一次把b的值賦值給a了。所以a改變不會影響b

2018年5月28日 10:02
編輯回答
薄荷綠

var a = b = [];
這段代碼其實是這樣的:

var b = [];//b中存的只是該數(shù)組的地址引用(或者地址指針)
var a = b;//將b的指針賦給a,此時a和b訪問的是堆內(nèi)存中的同一個數(shù)據(jù)

var a = b = 'hello';
而字符串不存在指針的問題:

var b = 'hello';//b中存的就是'hello'這個值
var a = b;//將b的值賦給a,此時a和b的值都為'hello'

您可以點擊這里多了解一下內(nèi)存空間的相關(guān)知識

希望我的回答能幫助到您^_^

2018年5月4日 12:06
編輯回答
傲寒

字符串是基本類型
對象是引用類型
基本類型復(fù)制的是值
引用類型復(fù)制的是引用地址

2018年7月21日 06:13
編輯回答
做不到

有個類似的問題請參考我的回答

2017年8月5日 04:29