題目一:
// 基本資料型別直接存在棧記憶體中
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...