number、string、null、boolean、undefined
object
變數都是儲存在棧記憶體中的
js中的變數都是儲存在棧記憶體中的,基本資料型別的值直接在棧記憶體中儲存,值與值之間是獨立存在的,修改乙個變數的值不會影響到其它變數的值。
比如:
var a=10;原理如下圖:var b=a;
a++;
console.log(b);//10
console.log(a);//11
物件(引用資料型別)是儲存在堆記憶體中的
每建立乙個新的物件,就會在堆記憶體中開闢出乙個新的記憶體空間,而變數儲存的是物件在堆中的記憶體位址(物件的引用,類似指標),如果兩個變數儲存的是同乙個物件的引用,當通過其中乙個變數修改屬性時,另乙個也會收到影響,因為他們兩個變數都指向堆記憶體中的同一物件。
比如:
var obj=new object();
obj.name="張三";
var obj2=obj;
obj2.name="李四";
console.log(obj.name);//李四
console.log(obj2.name);//李四
原理圖如下
沒有改屬性前
改了屬性後
對變數obj2重新賦值為null
var obj=new object();
obj.name="張三";
var obj2=obj;
obj2.name="李四";
obj2=null;
console.log(obj);
console.log(obj2);
結果如圖:
原理是因為對變數重新賦值相當於在棧中把obj2對應的值修改了,並沒有修改到堆中的物件的屬性,相當於僅僅只是把原本存的堆中物件的引用給替換為了其它值,使obj2與堆中的物件失去了聯絡。
如圖:重新建立兩個物件
var obj3=new object();
obj3.name="張三";
var obj4=new object();
obj4.name="張三";
console.log(obj3==obj4);//結果為false;
原理:
當比較兩個基本資料型別的值時,就是比較值。
而比較兩個引用資料型別時,它是比較的物件的記憶體位址。即使兩個物件是一模一樣的,但是位址不同,它也會返回false。
總結,基本資料型別儲存的是值,引用資料型別儲存的是引用(位址)
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...
基本資料型別和引用資料型別
資料型別 基本資料類 1.數值型 整數 byte short int long 浮點 float double 2.字元型 char 3.布林型 boolean 引用資料型別 1.類 class 2.介面 inte ce 3.陣列 array 基本資料型別 它的值是乙個數字 字元或布林值,變數指向具...