首頁 > web前端 > js教程 > JavaScript引用賦值詳解

JavaScript引用賦值詳解

零下一度
發布: 2017-04-17 17:54:44
原創
2855 人瀏覽過

JavaScript中沒有指針,而且JavaScript中的引用與我們通常看到的大多數其他流行程式語言的工作方式不同。在JavaScript中,不可能有一個變數到另一個變數的參考。而且,只有複合值(例如物件或陣列)可以透過引用來賦值。


整片文章將使用下列屬於:

1、標量–單一值或資料單元(如整數、布林值、字串)

2 、複合--由多個值組成(如陣列、物件、集合)

3、原始- 直接的價值,而不是對包含值的東西的參考。

JavaScript的標量型別是原語,不像其他一些語言(如Ruby)有標量參考型別。注意,在JavaScript中,標量原始值是不可變的,而複合值是可變的。


概要:

1.指派給變數的值的型別決定該值儲存的是值還是參考。

2.在變數賦值的時候,標量原始值(Number,String,Boolean,undefined,null,Symbol)透過值來賦值,複合值透過引用來賦值。

3.JavaScript中的參考僅指向包含的值,不指向其他變數或參考。

4.在JavaScript中,標量原始值是不可變的,複合值是可變的。


透過值賦值的快速範例

在下面的程式碼片段中,我們將一個標量原始值(一個數字)指派給一個變量,因此這裡是透過值來賦值。首先,變數 batman被初始化,當變數superman被分配儲存在batman中的值的時候,實際上是創建了該值的一個副本並儲存在變數superman中。當變數superman被修改時,變數batman不會受到影響,因為它們指向不同的值。

var batman = 7;
var superman = batman;   //通过值来赋值
superman++;
console.log(batman);     //7
console.log(superman);   //8
登入後複製

 

 

JavaScript引用賦值詳解


JavaScript引用賦值詳解


JavaScript引用賦值詳解




JavaScript引用賦值詳解


##################### #####在下面的程式碼片段中,我們將一個複合值(數組)賦值給一個變量,因此這裡是透過引用賦值。變數flash和quicksilver是相同的值(也稱為共享值)的參考。當修改共享值時,引用將指向更新的值。 ###
var flash = [8,8,8];
var quicksilver = flash;   //通过引用来赋值
quicksilver.push(0);
console.log(flash);        //[8,8,8,0]
console.log(quicksilver);  //[8,8,8,0]
登入後複製
### ###### ################ ############如何建立一個新的參考##### #####當變數中的複合值被重新賦值的時候,將會建立一個新的參考。在JavaScript中,與大多數其他流行的程式語言不同是:引用指向儲存在變數中的值,不指向其他變數或引用。 ###
var firestorm = [3,6,3];
var atom = firestorm;   //通过引用来赋值
console.log(firestorm); //[3,6,3]
console.log(atom);      //[3,6,3]
atom = [9,0,9];         //通过值来赋值 (创建新的引用)
console.log(firestorm); //[3,6,3]
console.log(atom);      //[9,0,9]
登入後複製
### ###### ################ ############當引用傳遞為函數參數時,引用如何工作#########在下面的程式碼片段中,變數magneto是一個複合值(一個陣列),因此它作為一個引用被賦值給了變數x(函數參數)。 ######IIFE中呼叫的Array.prototype.push方法會透過JavaScript引用來改變變數中的值。但是,變數x的重新賦值會建立一個新的引用,並且對變數x的進一步修改不會影響到變數magneto的引用。 ###
var magneto = [8,4,8];
(function(x) {        //IIFE
    x.push(99);
    console.log(x);   //[8,4,8,99]
    x = [1,4,1];      //重新赋值变量 (创建一个新的引用)
    x.push(88);
    console.log(x);   //[1,4,1,88]
})(magneto);
console.log(magneto); //[8,4,8,99]
登入後複製
### ###### ######### 如何更改作為函數參數透過JavaScript參考傳遞的複合變數中的原始值######這裡的解決方案是修改引用指向的現有複合值。在下面的程式碼片段中,變數wolverine是一個複合值(一個陣列)並且在IIFE中被調用,變數x(函數參數)是被賦值了一個引用。 ######可以透過將屬性Array.prototype.length的值設為0來建立一個空數組。因此,變數wolverine透過JavaScript引用更改為變數x中的新值。 ###
var wolverine = [8,7,8];
(function(x) {              //IIFE
    x.length = 0;           //创建空数组对象
    x.push(1,4,7,2);
    console.log(x);         //[1,4,7,2]
})(wolverine);
console.log(wolverine);     //[1,4,7,2]
登入後複製
### ############如何透過以值賦值來儲存複合值#########這裡的解決方案是製作複合值的手動副本,然後將複製的值分配給變數。因此,分配值的參考不指向原始值。 ######建立一個(淺)複合值副本(陣列物件)建議呼叫Array.prototype.slice方法,而不傳遞任何參數。 ###
var cisco = [7,4,7];
var zoom = cisco.slice();  //创建浅复制
cisco.push(77,33);
console.log(zoom);         //[7,4,7]
console.log(cisco);        //[7,4,7,77,33]
登入後複製
### ###### ################ ############如何透過依引用賦值來儲存一個標量初始值#########這裡的解決方案是將標量原始值包含在複合值(即物件或陣列)中作為其屬性值。因此,它可以透過引用來賦值。在下面的程式碼片段中,變數speed中的標量原始值設定為flash物件的屬性。因此,在呼叫IIFE的時候,它透過引用賦值給了x(函數參數)。 ###
var flash = { speed: 88 };
(function (x) {             //IIFE
    x.speed = 55;
})(flash);
console.log(flash.speed);   //55
登入後複製

以上是JavaScript引用賦值詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板