一個專注於web技術的80後
你不用拼過聰明人,你只需要拼過那些懶人 你就一定會超越大部分人!
標量型別的值 一般儲存在棧區中!
標量指: 整型、浮點、字串、布林值、等..
物件型別分為: 物件引用 和 物件體!
物件引用儲存在棧區中 、物件體儲存在堆區中、
1. 記憶體空間基本資料儲存分析圖1注意: 一旦new一個物件,就必然會在記憶體中生成新的的區域來儲存物件資料、
而且最重要的就是這個時候在記憶體中物件的地址是不一樣的 , 因為 new 會生成一個新的地址在棧區中
2.物件引用型別地址傳遞分析圖2程式碼案例1:
var json={ "username":"張三", "age":22, "fn1":function(){ console.log('我的名字叫'+this.username); } } //透過物件引用修改屬性值1 /*function fn2(obj){ obj.username="李四"; } fn2(json);*/ //透過物件引用修改屬性值2 var a=json; a.username='李四'; console.log(json.username);
分析圖如下
3.物件引用型別地址傳遞分析圖3程式碼案例2:
function Person(name,age,salary) { this.name=name; this.age=age; this.salary=salary; } function fn1(obj) { obj.name='王武'; obj=new Person('李四',24,8000); console.log(obj.name); } var obj=new Person('張三',33,6000); console.log(obj.name); //結果: 張三 fn1(obj); //結果 李四 console.log(obj.name); // 王武
分析圖如下
物件引用 圖分析小結:
在js中, 普通變數值作為函式的引數就是 值傳遞在js中, 物件引用型別的變數作為函式的引數 就是 址傳遞! 所以 注意一下 這裡的值傳遞 與 址傳遞一旦new一個物件 就一定會在堆區中建立一個空間,並賦予一個新地址 上面已經說過了!4.物件資料的比較在js中、基本資料型別資料的比較 是值的比較 值相同就可以了、
物件型別的比較 要滿足兩個要求、 第一是值要相同、第二引用地址也要相同才行
案例程式碼:
//--案例1 var a=[1,2,3]; var b=[1,2,3]; console.log(a==b); //結果為false 雖然值一樣,但地址是不同的! var a=[1,2,3]; var b=a; console.log(a==b); //結果為true 因為b指向了a這個地址,並且值也能夠得到!
原理圖 如下:
大家的支援就是我堅持下去的動力!
最新評論