js語言精粹之值和引用

2021-08-03 08:50:29 字數 1115 閱讀 1286

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]的兩個不同的引用,c和d僅僅是指向[1,2,3,4],並非持有,所以更改的是同乙個值

由於引用指向的是指本身而非變數,所以乙個引用無法更改另乙個引用的指向

varc=[

1,2,

3];var

d= c;

c;//[1,2,3]

d;//[1,2,3]

d=[ 4,

5,6];

c;//[1,2,3]

d;//[4,5,6]

function

foo(

x);vara=[

1,2];

foo(

a);console.

log(

a);//[1,2,0]

我們向函式傳遞引數的時候,實際上是將引用a的乙個副本賦值給x,a仍然指向[1,2],在函式中我們可以通過引用x來改變陣列的值

但x=[7

,8]並不影響a的指向,所以a仍然指向[1,2,0]

我們不能通過x來更改a的指向,只能更改a和x共同指向的值

function

foo(

x);vara=[

1,2];

foo(

a);console.

log(

a);//[7,8,9]

如果要將標量基本型別值傳遞到函式中進行更改,需要將該值封裝到復合值中:

function

foo(

wrap);

varobj=;

foo(

obj);

obj.

a;//42

js語言精粹

1 typeof null object 所以不能通過typeof object 判斷為物件 a 判斷為null的,直接 null b 判斷物件 typeof object 因為null為假 2 prototype和 proto 的概念 prototype是函式的乙個屬性 每個函式都有乙個proto...

js語言精粹 繼承

當乙個函式物件被建立時,function構造器產生的函式物件會執行類似這樣的 this.prototype 當採用構造器呼叫模式,即使用new字首去呼叫乙個函式時,這將修改函式執行的方式。如果new運算子是乙個方法而不是乙個運算子,它可能會像這樣執行 function.method new func...

js 值和引用

js對值和引用的賦值 傳遞在語法上沒有區別,完全根據值得型別決定 簡單值 即標量基本型別值 總是通過值複製的方式來賦值 傳遞,包括null,undefined,字串,數字,布林值和es6中的symbol。復合值 物件 包括陣列和封裝物件 和函式,則總是通過引用複製的方式來賦值 傳遞。簡單值var a...