當前位置:成語大全網 - 書法字典 - 如何將js賦值轉換為value賦值

如何將js賦值轉換為value賦值

在談到js的賦值方法時,首先要說明js的數值類型:基本類型和引用類型。

1,基本類型

基本數據類型有:未定義、布爾、數字、字符串、空。基本類型存儲在堆棧區域,通過值進行訪問,這意味著您可以操作存儲在變量中的實際值。

基本類型的數據賦值時,賦予實際值,A和B不相關,B是從A復制過來的,彼此獨立。(文字量是基本類型)

var a = 10;

var b = a;

console.log(a+','+b);// 10,10

a++;

console.log(a+','+b)?//?11,10

2.參考類型

引用類型引用壹個對象。妳可以有屬性和方法,我們可以修改它們的屬性和方法。通過在堆中存儲對象變量的標記名稱和對象的存儲地址,並在堆中存儲數據,將引用對象存儲在堆棧中。

對象是通過引用分配的。當我們把壹個對象賦給壹個新的變量時,實際上是對象在堆中的地址,而不是堆中的數據。也就是說,兩個對象指向同壹個存儲空間。無論哪個對象發生變化,其實都是變化了的存儲空間的內容。因此,這兩個對象是有聯系的。

3.數組是引用類型。

我們先來看壹個例子:

var?答?=?;

var?b?=?a;

答?=?;

警戒(b);?//

就好像數組是基本類型壹樣。。,但是:

var?答?=?;

var?b?=?a;

a . pop();

警戒(b);?//

這是怎麽回事?因為:(智虎解釋)

a =;//改變的是A引用本身,數組對象不變,A和B沒有關系。

a . pop();//數組對象變了,A引用沒變。

b = a;//這個操作之後,B直接指向數組對象,而不是B指向A,A再指向數組。

//所以改變A引用不會影響B引用,但是改變數組對象可以。

這個問題和我在Reacttodo-List壹文中提到的問題是壹樣的:

var tasks = this . state . data;

tasks=tasks.filter(函數(i){

返回i.index!= taskId

});

因為filter函數返回壹個新的數組,雖然還是用任務來接收,但是此時任務指向了壹個新的數組,所以任務和數據不再相關。(concat也返回壹個新數組)

push和splice函數是對原數組進行操作的,所謂對原數組的操作是指不變性,所以任務和數據是有關聯的。

4.參數傳遞

js的函數參數作為值傳遞。

當傳入基本類型的參數時:它只是將內容復制給I,I和年齡沒有關系。

功能設置(壹)

{

警報(壹);//24

I = 18;

警報(壹);//18,I的變化不會影響外面的年齡。

};

var年齡= 24;

setAge(年齡);

警覺(年齡);//24

當傳入的參數是引用類型時:

函數集名(對象)

{

obj.name = '哈哈';

};

var obj 2 = new Object();

set name(obj 2);

alert(obj 2 . name);// ?哈哈的笑

看起來像是傳遞了壹個引用,因為obj.name被修改了,但實際上不是,它還是壹個值,因為obj2的值本身就是新對象的地址,所以這就是傳入的地址。

這是阿裏2014的測試:?

var a = 1;

var obj = {

乙:2

};

var fn = function(){ };

fn . c = 3;

功能測試(x,y,z) {

x = 4;

y . b = 5;

z . c = 6;

返回z;

}

test(a,obj,fn);

alert(a+obj . b+fn . c);

答案:12

首先,test傳入的參數中,a是基本類型(值的副本),obj是對象(指向地址,妳移動我移動),fn當然不是基本類型。執行測試時,X賦給4(和A沒關系,還是1),Y的B賦給5,obj的B變成5,Z的C變成6,fn的C當然也會是6。所以alert的結果應該是1+5+6 =12。