javaScript 原始值和引用值的問題

1.js的數(shù)據(jù)類型分為基本類型(Undefined,Null,Boolean,Number、String)和引用類型(Array, Oject, function....Date ,RegExp)
typeOf(null)->obj

2.基本類型:不論是變量名還是原始值都在棧中。
當(dāng)把一個原始變量傳遞給另一個原始變量時,是把一個棧房間的東西復(fù)制到另一個棧房間,且這兩個原始變量互不影響。

3.引用類型:變量名在棧中,數(shù)值在堆中,他們中間通過指針進行連接。
當(dāng)把引用對象傳遞給另一個變量時,復(fù)制的其實是指向?qū)嶋H對象的指針, 此時 兩者指向的 是同一個數(shù)據(jù),若通過方法改變其中一個變量的值,則訪問另一個變量時,其值也會隨之加以改變;但若不是通過方法 而是通過 重新賦值 此時 相當(dāng)于 重新開了一個房間 該值的原指針改變 ,則另外一個 值 不會隨他的改變而改變。

eg:

var a="hello";
var b=a;
a="world";
alert(a);//world
alert(b);//hello
var arr=[1,3];
arr1=arr;
arr.push(5);
alert(arr)//1,3,5
alert(arr1);//1,3,5
arr=[7,8];
alert(arr);//7,8
alert(arr1);//1,3,5
var a = [1,2,3]
var b = a
b[0] = 5
a->[5,2,3]
b->[5,2,3]
1553568964681.jpg

這里可以這樣理解,如果是重新負(fù)值的話,引用類型都是又開辟了一個新的房間,那就有了新的內(nèi)存地址,但是如果使用了push,pop方法,或者只是在原來數(shù)據(jù)的基礎(chǔ)上更改的都不會開辟新的房間

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容