JS中的變量是保存在棧內存中的
- 基本數據類型的值直接在棧內存中存儲;
- 值與值之間是獨立存在的,修改一個變量不會影響其他變量;
var a=20; var b=a; a++;
- 對象(引用數據類型)是保存到堆內存中的,每創建一個新的對象,就會在堆內存中開辟一個新的空間;
- 而變量保存的是對象的內存地址(對象的引用),如果兩個變量保存的是同一個對象引用,當一個變量修改屬性是,另一個也會受到影響;
var obj1=new Object(); obj1.name="mike"; var obj2=obj1; obj2.name=“jack”; console.log(obj1.name);//jack
- 當清空一個變量的值時,只是斷開該變量與對象的聯系,另一個對象並不受影響
obj2=null
- 當比較兩個基本數據類型的值時,就是比較值;
- 當比較兩個引用數據類型時,比較的是對象的內存地址;
var a=10; var b=10; console.log(a==b);//true var obj1=new Object(); var obj2=new Object(); console.log(obj1==obj2);//false
問題:
數組乃引用數據類型,因此修改b的值,a也會受影響
var a=[1,2,3]; var b=a; b[0]=10; console.log(a[0]);//10;
如何解決該問題?
深拷貝,該部分會單獨寫一篇文章講述。。。