變數都是儲存在棧記憶體中,基本資料型別的值直接在棧記憶體中儲存。相互不影響。
var a = 123;
var b = a;
a++; // b的值不變
棧記憶體中:變數值
b123
a123
物件儲存在堆記憶體中
var obj = new object();
obj.name = "墨祈";
var obj2 = obj;
obj.name = "moqi"; // obj和obj2的名字都被改了
棧記憶體:變數值
obj2
0x123
obj0x123
堆記憶體:
當new出現時,在堆記憶體中拿出一塊空間給new的這個東西,假如這個空間的位址是 0x123。
每建立乙個新物件,就會在堆記憶體中開闢出乙個新的空間,而變數儲存的是物件的記憶體位址(物件的引用)
當執行obj.name = "墨祈";
時,在堆記憶體開闢出的空間中新增一條name = "墨祈";
當執行var obj2 = obj;
時,在棧記憶體中新增obj2, 0x123
當修改屬性時,因為兩個變數儲存的是同乙個物件(同一塊記憶體),他們的值同時改變。
若obj2 = null
, 則鏈結斷開,obj2和obj不再指向同乙個物件。
當比較兩個引用資料型別時,比較的是記憶體位址。
var obj3 = new object();
var obj4 = new object();
console.log(obj3==obj4); // false
兩個物件,所有值都一樣,也不相等。因為不指向同乙個位址。
上述obj == obj2為true, 因為指向同乙個位址。
js 基本資料型別和引用資料型別
1 資料型別 js分兩種資料型別 基本資料型別 number string boolean null undefined symbol es6 這些型別可以直接操作儲存在變數中的實際值。引用資料型別 object 在js中除了基本資料型別以外的都是物件,資料是物件,函式是物件,正規表示式是物件 2 ...
資料型別 基本資料型別和引用資料型別
一.分類 1,五種簡單資料型別 基本資料型別 number,string,boolean,null,undefined,新增symbol es6 基本資料型別是指存放在棧中的簡單資料段,資料大小確定,記憶體空間大小可以分配,它們是直接按值存放的,所以可以直接按值訪問。1 undefined 宣告的變...
js基礎 基本資料型別和引用資料型別
number string null boolean undefined object 變數都是儲存在棧記憶體中的 js中的變數都是儲存在棧記憶體中的,基本資料型別的值直接在棧記憶體中儲存,值與值之間是獨立存在的,修改乙個變數的值不會影響到其它變數的值。比如 var a 10 var b a a c...