」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > JavaScript 值與引用

JavaScript 值與引用

發佈於2024-07-31
瀏覽:527

JavaScript values vs reference

了解 JavaScript 中如何保存變數:作為值或引用

在 JavaScript 中,或者更確切地說,在程式設計中,變數是電腦記憶體中用於儲存資料的位置。變數被聲明(給定名稱、標識符),並且可以立即或稍後分配一個值,具體取決於語言。然後可以在程式中稍後引用該變量,而不是再次明確地聲明相同的值。

在 JavaScript 中,資料以值的形式傳遞,這些值可以是原始值或物件值。身為 JavaScript 開發人員,了解 JavaScript 如何處理資料對於擁有紮實的語言基礎至關重要。

原始值包括:

  • 字串。
  • 數字。
  • 布林值。
  • BigInt。
  • 象徵。
  • 不明確的。

另一方面,物件值是:

  • 陣列。
  • 功能。
  • 對象。

這些值類型在傳遞時表現不同,請考慮下面的程式碼片段:

var myName = "Fred";
var otherName = myName;
我的名字 = "艾希莉";
console.log(我的名字); //阿什利
console.log(其他名稱); //弗雷德

請注意,otherName 保持不變,儘管它看起來像是 myName 的「副本」。事實上,實際發生的情況是,當 otherName 被分配給 myName 時,它並沒有被分配為字串「Fred」的副本,而是創建了一個新字串「Fred」。因此,myName 和 otherName 之間沒有直接連結。這就是 JavaScript 傳遞原始值的方式。

物件值的處理方式不同,請看下面的程式碼片段:

var myObj = {顏色:「紅色」};
var otherObj = myObj;
myObj.color = "藍色";
console.log(myObj.color); //藍色的
console.log(otherObj.color); //藍色的

這裡,建立了物件並將其指派給 myObj,然後將其指派給 otherObj,看看如何僅透過變更 myObj 的色彩屬性來變更 otherObj 和 myObj 色彩屬性。這是因為物件值作為參考傳遞。 myObj 不直接引用該對象,而是指向其引用,然後將 otherObj 分配給 myObj,它是對真實對象的引用。因此,兩個變數都連結到同一個對象,因為它們指向相同的引用,其中一個變數的變更會影響另一個變數。

這就是為什麼兩個物件的比較(===)直接傳回 false,您實際上是在比較兩個不同的參考。這裡, myObj === otherObj 傳回 true,因為我們正在比較相同的引用。

我希望這能讓您對 JavaScript 在幕後如何運作有一個全新的視角。

在那之前,保持沒有錯誤。

版本聲明 本文轉載於:https://dev.to/js_cipher/javascript-values-vs-reference-1ao5?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 為什麼 `array_shift()` 會觸發「嚴格標準:只有變數應該透過引用傳遞」?
    為什麼 `array_shift()` 會觸發「嚴格標準:只有變數應該透過引用傳遞」?
    錯誤訊息「Strict Standards: Only Variables Should Be Passed by Reference」使用array_shift() 時,可能會報告嚴格標準如果傳遞的參數是函數呼叫的結果,則會發出警告。這種行為看起來不一致,因為它並不總是觸發警告。 考慮以下程式碼:...
    程式設計 發佈於2024-12-21
  • 如何在 Pandas 中進行聚合?
    如何在 Pandas 中進行聚合?
    Pandas 中的聚合如何使用 Pandas 執行聚合? 聚合函數會降低傳回物件的維度。一些常見的聚合函數包括mean()、sum()、size()、count()、std()、var()和sem()。 df1 = df.groupby(['A', 'B'], as_index=False)['C'...
    程式設計 發佈於2024-12-21
  • 如何在 C++ 中初始化靜態 `const std::string` 資料成員?
    如何在 C++ 中初始化靜態 `const std::string` 資料成員?
    宣告const std::string 類型的靜態資料成員在C 中,直接在類別定義中初始化const std::string 類型的靜態資料成員是不允許。相反,有兩個選項可以定義此類資料成員:內聯變數(C 17 或更高版本)使用內聯變量,它定義並初始化類別定義中的靜態成員:class A { pri...
    程式設計 發佈於2024-12-21
  • 如何在 Python 中從函數內部取得函數名稱?
    如何在 Python 中從函數內部取得函數名稱?
    從函數內部存取函數名稱在Python 中,從函數本身內部確定函數名稱在動態自省的情況下非常有用inspect 模組提供了一個方便的機制來獲取有關正在運行的程式碼的資訊。使用inspect.stack(),我們可以存取表示目前呼叫堆疊的幀列表。 對於給定的函數,堆疊列表中的第一幀對應於當前函數,而第二...
    程式設計 發佈於2024-12-21
  • 如何將電子表格列索引號轉換為其等效字母?
    如何將電子表格列索引號轉換為其等效字母?
    將電子表格列索引轉換為字母在 Google 表格中,列用數字索引,從 1 開始。但是,為了方便起見,它們通常也使用字母來表示(例如,“A”表示第一列,“D”表示第四列)。數字索引和字母值之間的轉換通常是腳本任務所必需的。 實作此轉換的一種方法是透過以下函數:function getColumnLet...
    程式設計 發佈於2024-12-21
  • 為什麼 `reader.ReadString` 不刪除初始分隔符號?
    為什麼 `reader.ReadString` 不刪除初始分隔符號?
    reader.ReadString 不會去掉初始分隔符號reader.ReadString 不會去掉初始分隔符號為了創建一個程式來迎接名為Alice 或Bob 的用戶,開發人員遇到一個問題,即使是合法的名稱也會引發不受歡迎的回應。程式錯誤地拒絕了 Alice 和 Bob 的進入。 問題此問題源自於程...
    程式設計 發佈於2024-12-21
  • 如何透過ServletContext存取WAR/WEB-INF目錄下的資源?
    如何透過ServletContext存取WAR/WEB-INF目錄下的資源?
    透過ServletContext存取WAR/WEB-INF目錄中的資源簡介: Java Web 應用程式通常將重要資源儲存在WAR/WEB-INF 目錄中。要存取這些資源,開發人員可以利用 ServletContext API。 問題:如何創建位於 WAR/WEB-INF中的資源的正確路徑資料夾,例...
    程式設計 發佈於2024-12-21
  • 如何使用 Bootstrap 隱藏響應式佈局中的元素?
    如何使用 Bootstrap 隱藏響應式佈局中的元素?
    使用Bootstrap 隱藏響應式佈局中的元素設計響應式佈局時,管理空間變得至關重要,尤其是在較小的螢幕上。 Bootstrap 為行動裝置提供了對折疊功能表列專案的支持,但是如果您想類似地隱藏其他頁面元素怎麼辦? 解決方案:解決方案:Bootstrap 提供了允許您的類別根據螢幕尺寸隱藏元素:超小...
    程式設計 發佈於2024-12-21
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-12-21
  • 如何修復嵌入式Python中的「Py_Initialize:無法載入檔案系統編解碼器」錯誤?
    如何修復嵌入式Python中的「Py_Initialize:無法載入檔案系統編解碼器」錯誤?
    解決嵌入式Python 中的「Py_Initialize:無法載入檔案系統編解碼器」錯誤嘗試將嵌入式Python 3.2 解譯器整合到對於C 應用程序,可能會出現指示“無法載入檔案系統編解碼器”的錯誤。當 Py_Initialize 函數無法註冊編解碼器搜尋函數時,會發生此錯誤。 要解決此問題,必須...
    程式設計 發佈於2024-12-21
  • JavaScript 可以捕獲網頁螢幕截圖並將其發送到伺服器嗎?
    JavaScript 可以捕獲網頁螢幕截圖並將其發送到伺服器嗎?
    使用 JavaScript 擷取網頁螢幕截圖:可能嗎? 在基於 Web 的應用程式無所不在的世界中,對網頁進行螢幕截圖已成為可能成為開發人員和使用者的重要任務。然而,問題出現了:使用 JavaScript 捕獲網頁截圖並提交回伺服器是否可行? 使用 JavaScript 進行網頁截圖的挑戰由於由於瀏...
    程式設計 發佈於2024-12-21
  • 儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    解決PHP 中的POST 請求故障在提供的程式碼片段中:action=''而非:action="<?php echo $_SERVER['PHP_SELF'];?>";?>"檢查$_POST陣列:表單提交後使用 var_dump 檢查 $_POST 陣列的內...
    程式設計 發佈於2024-12-21
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1 和 $array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建...
    程式設計 發佈於2024-12-21
  • 如何使用 PHP 計算兩個日期之間的時差(以秒為單位)?
    如何使用 PHP 計算兩個日期之間的時差(以秒為單位)?
    計算兩個日期之間的時差(以秒為單位)計算兩個日期之間的時差(以秒為單位)在各種情況下都很有用。本文旨在為這項任務提供一個清晰的解決方案,解決先前 Stack Overflow 討論中面臨的挑戰。 確定兩個日期之間的時間跨度,例如“2011-05-12 18:20:20 ”和“2011-05-13 1...
    程式設計 發佈於2024-12-21
  • 插入資料時如何修復「常規錯誤:2006 MySQL 伺服器已消失」?
    插入資料時如何修復「常規錯誤:2006 MySQL 伺服器已消失」?
    插入記錄時如何解決「一般錯誤:2006 MySQL 伺服器已消失」介紹:將資料插入MySQL 資料庫有時會導致錯誤「一般錯誤:2006 MySQL 伺服器已消失」。當與伺服器的連線遺失時會出現此錯誤,通常是由於 MySQL 配置中的兩個變數之一所致。 解決方案:解決此錯誤的關鍵是調整wait_tim...
    程式設計 發佈於2024-12-21

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3