js基本資料型別和引用型別儲存操作原理

2021-10-08 13:41:52 字數 2547 閱讀 3583

題目一: 

// 基本資料型別直接存在棧記憶體中

var a=12;//定義變數的三個步驟:先建立值12,再建立變數a,再將值12 和變數a關聯(賦值操作)

var b=a;//建立b,將b和a的值12關聯

b=13;//b和13關聯,乙個變數只能關聯1個值

console.log(a);//a還是之前關聯的值12

// 基本資料型別(值型別):結構簡單,直接把建立的值存在棧記憶體。棧記憶體有兩個作用:儲存基本型別值+提供**執行環境

//引用資料型別結構複雜不能直接存在棧內從,需要單獨開闢空間儲存,儲存在「堆記憶體」,堆記憶體只有乙個作用:儲存引用型別

var n=;

var m=n;//建立變數m,將m也與n建立堆記憶體的位址關聯

m.name="小狗";//m通過位址找到對應的堆記憶體,在堆記憶體中修改name的值為「小狗」,此時堆記憶體中name值已經改變為「小狗」

console.log(n.name);//n和m共用同乙個堆記憶體因此輸出「小狗」

題目二:

example1:

var a={},//開闢堆記憶體,建立變數a

b="0",//棧記憶體中 var b="0"

c=0;//棧記憶體中 var c=0

//物件[屬性名]=屬性值(屬性名是具體的值,如果是物件,會轉換為字串

a[b]="小貓";// a["0"]="小貓",把變數b的值作為屬性名,存在堆中

a[c]="小狗";//a[0]="小狗" 物件中屬性名不能重複,如果重複算同乙個屬性,,此時堆裡的值為 a[0]="小狗"

console.log(a[b]);//堆中存的是同乙個屬性 "小狗"

example2:

var a={},

b=symbol("1"),//唯一值,不和其他任何人相等

c=symbol("1");//也是唯一值,b和c不相等

a[b]="小貓";// a[b]=a[symbol("1")]="小貓"

a[c]="小狗";// a[c]=a[symbol("1")]="小狗"

console.log(a[b]);//"小貓"

example3:

var a={},

b=,//開闢堆記憶體n:"1",將記憶體位址存到棧中

c=;//開闢堆記憶體m:"2",將記憶體位址存到棧中

a[b]="小貓";//物件[屬性名]=屬性值(屬性名是具體的值,如果是物件,得轉換為字串)

//這裡a[b]= a["[object object]"]="小貓"

a[c]="小狗";

//這裡a[c]= a["[object object]"]="小狗" 屬性名重複,算作同乙個屬性

console.log(a[b]);//堆中存的是同乙個屬性 "小狗"

題目三:(阿里比較經典的題目)

var a=;

var b=a; //建立變數b,將b與a在堆中位址aaafff000關聯

a.x=a=,注意這裡a並未改變,是給a的x屬性賦值為,a還是

//這個賦值行為,改變了這個物件,即給它增加了名為x的屬性

//再執行a=,這是變數a不再是物件,而被重新賦值為乙個新的物件;

}console.log(a.x);//undefined

console.log(b);//

}console.log(a.x);//基於最新的位址aaafff111,查詢x屬性undefined

console.log(b);//

畫**析: 

題目四:

var a=0;

var b=a;//b=0;

b++;//b=1

alert(a);//"0"

var o={};

o.a=0; //o=

var b=o;//b=

b.a=10;//b=

alert(o.a);//"10"

題目五:

// 陣列是特殊物件,也要用堆來儲存

var y=x;//建立變數y,將y與x在堆中的位址關聯此時y=[1,2,3]

y[0]=10; //修改堆中變數y所指向的陣列,修改後y=[10,2,3]

y=z; //重新修改y的指向,將y與z在堆中的位址關聯,此時y=[4,5,6]

z[1]=20; //修改堆中變數z所指向的陣列,修改後z=[4,20,6]

x[2]=z=30;//將數字30賦值給變數z,再將z=30賦值給陣列中下標為2的值。此時x=[10,2,30] z=30

console.log(x,y,z);//此時,x=[10,2,30];y=[4,20,6];z=30

js 基本資料型別和引用資料型別

1 資料型別 js分兩種資料型別 基本資料型別 number string boolean null undefined symbol es6 這些型別可以直接操作儲存在變數中的實際值。引用資料型別 object 在js中除了基本資料型別以外的都是物件,資料是物件,函式是物件,正規表示式是物件 2 ...

JS 基本資料型別 和 引用資料型別

變數都是儲存在棧記憶體中,基本資料型別的值直接在棧記憶體中儲存。相互不影響。var a 123 var b a a b的值不變棧記憶體中 變數值 b123 a123 物件儲存在堆記憶體中 var obj new object obj.name 墨祈 var obj2 obj obj.name moq...

js基礎 基本資料型別和引用資料型別

number string null boolean undefined object 變數都是儲存在棧記憶體中的 js中的變數都是儲存在棧記憶體中的,基本資料型別的值直接在棧記憶體中儲存,值與值之間是獨立存在的,修改乙個變數的值不會影響到其它變數的值。比如 var a 10 var b a a c...