js對值和引用的賦值/傳遞在語法上沒有區別,完全根據值得型別決定
簡單值(即標量基本型別值),總是通過值複製的方式來賦值/傳遞,包括null,undefined,字串,數字,布林值和es6中的symbol。
復合值——物件(包括陣列和封裝物件)和函式,則總是通過引用複製的方式來賦值/傳遞。
簡單值var a0=2;
var b0=a0;
b0++;
console.log(a0);//2
console.log(b0);//3
簡單值注意
雖然傳遞的是指向數字物件的引用複本,但我們並不能通過它來更改其中的基本型別值
function foo(x);
foo(obj);
console.log(obj.a);// 42
注意函式引數
function foo(x)
var e=[1,2,3];
foo(e);
console.log(e);//[1,2,3,4]而非[4,5,6,7]
我們像函式傳遞e的時候,實際是將引用e的乙個複本賦值給x,而a仍然指向[1,2,3].在函式中我們可以通過引用x來更改陣列的值(push(4)之後變為[1,2,3,4]).但x=[4,5,6]並不影響e的指向,所以e仍然指向[1,2,3,4].
不能通過引用x來更改引用e的指向,只能更改e和x的共同指向的值。
如果要將e的值變為[4,5,6,7],必須更改x指向的陣列,而不是為x賦值乙個新的陣列
function foo(x)
var e=[1,2,3];
foo(e);
console.log(e);//[4,5,6,7]
Js 中的原始值和引用值
最近開始注重自己的基礎知識,以前總是覺得自己什麼都要會一點,不精也沒關係,現在想想,感覺這種想法是錯誤的。一些最基本的基礎底層知識還是要很紮實的。原始值即一些代表原始資料型別的值,也叫基本資料型別,首先說一下js中有哪些原始值,number,string,boolean,null,undefined...
JS變數的原始值和引用值
原始值型別 undefined null boolean number 和 string 型 引用值型別 object,array 函式 儲存在堆 heap 中的物件 什麼是棧?由作業系統自動分配釋放 存放函式的引數值,區域性變數的值等,存放一些基礎型別。什麼是堆?是為動態分配預留的記憶體空間 你可...
js語言精粹之值和引用
var a 2 varb a b是a的乙個副本 b a 2b 3 基本資料型別是值複製 varc 1,2,3,4 var d c d是 1,2,3,4 的乙個引用 d.push 5 c 1,2,3,4,5 d 1,2,3,4,5 復合型別是引用複製 c和d分別指向乙個 1,2,3,4 的兩個不同的引...