在 JavaScript 中,或者更確切地說,在程式設計中,變數是電腦記憶體中用於儲存資料的位置。變數被聲明(給定名稱、標識符),並且可以立即或稍後分配一個值,具體取決於語言。然後可以在程式中稍後引用該變量,而不是再次明確地聲明相同的值。
在 JavaScript 中,資料以值的形式傳遞,這些值可以是原始值或物件值。身為 JavaScript 開發人員,了解 JavaScript 如何處理資料對於擁有紮實的語言基礎至關重要。
原始值包括:
另一方面,物件值是:
這些值類型在傳遞時表現不同,請考慮下面的程式碼片段:
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 在幕後如何運作有一個全新的視角。
在那之前,保持沒有錯誤。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3