簡體   English   中英

在JavaScript中將鍵/值對添加到Map的不同方法

[英]Different ways for adding key/value pair to a Map in JavaScript

根據MDN Map的set方法,在javascript 中將鍵/值對添加到地圖的唯一方法是set方法。 我想知道當我們添加一個帶有方括號的鍵/值對時,地圖的行為是什么,如下所示;

const testMap = new Map();
testMap.set( 1,"firstValue" );
testMap[2] = "secondValue";
console.log( testMap );
console.log( testMap[ 2 ] );
console.log( testMap[ '2' ] );

看來我們可以同時擁有地圖和對象! 有人可以向我解釋嗎? 我知道Map是一種對象,但是這種行為會導致很多錯誤。 有什么辦法可以防止這種情況? 順便說一句,如果您添加帶有方括號的鍵/值對,那么您將無法使用get方法來檢索它。

沒有任何示例無法按預期運行,當您使用方括號時,您是在testMap對象上設置屬性而不設置條目。 例如,您可以使用forEach方法遍歷地圖來確認這一點。

 const testMap = new Map(); testMap.set(1, "firstValue"); testMap[2] = "secondValue"; testMap.forEach(x => console.log(x)); 

如您所見,控制台上沒有secondValue ,也就是說,沒有具有該值的映射條目。 因此,它從未被添加到地圖中。

並且testMap.set(1, "firstValue");testMap.set(1, "firstValue"); 不等同於testMap[1] = "firstValue"; 允許您這樣做的唯一原因是因為javascript允許您將屬性添加到活動對象,但未將其添加到地圖項。

參考: MDN地圖

這是一種特殊情況。

映射是一種特殊情況,內部包含一個entries數組。 使用數組表示法時,設置鍵/值對在此條entries數組之外。

當使用setget方法時,實際上是在使用map代碼使用的內部entries數組。

在此處輸入圖片說明

上面的示例實質上創建了一個使用內部entries數組的Map對象。 但是,使用數組符號設置第二個對象意味着您要添加另一個條目/屬性,而不是在Entries數組中。

而且,這些值完全不同。 請注意,盡管這兩個數據結構不會沖突。 因此,testMap.get(2)與testMap [2]是不同的變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM