Map
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since â¨2015ë 7ìâ©.
* Some parts of this feature may have varying levels of support.
Map ê°ì²´ë í¤-ê° ìê³¼ í¤ì ìë ì½ì
ìì를 기ìµí©ëë¤. 모ë ê°(ê°ì²´ ë°
ìì ê° ëª¨ë)ì í¤ ëë ê°ì¼ë¡ ì¬ì©ë ì ììµëë¤.
ìëí´ ë³´ê¸°
const map1 = new Map();
map1.set("a", 1);
map1.set("b", 2);
map1.set("c", 3);
console.log(map1.get("a"));
// Expected output: 1
map1.set("a", 97);
console.log(map1.get("a"));
// Expected output: 97
console.log(map1.size);
// Expected output: 3
map1.delete("b");
console.log(map1.size);
// Expected output: 2
ì¤ëª
Map ê°ì²´ë í¤-ê° ìì¸ ì§í©ì
ëë¤. í Mapììì í¤ë ì¤ì§ ë¨ íëë§ ì¡´ì¬ í©ëë¤. ì´ë Map ì§í©ì ì ì¼ì±ì
ëë¤.
Map ê°ì²´ë í¤-ê° ìì¼ë¡ ë°ë³µë©ëë¤. for...of 루íë
ê° ë°ë³µì ëí´ [key, value]ë¡ ì´ë£¨ì´ì§ 멤ë²ê° 2ê°ì¸ ë°°ì´ì ë°íí©ëë¤. ë°ë³µì ì½ì
í ììëë¡ ë°ìí©ëë¤. ì¦,
set() ë©ìëë¡ ë§µì ì²ì
ì½ì
í ê°ê°ì í¤-ê° ì ììì ëìë©ëë¤. (set()ì´ í¸ì¶ëììë ë§µìì í´ë¹ í¤ê° ììì ê²½ì°ì
ëë¤)
Mapì ëª
ì¸ë "íê· ì ì¼ë¡ ì§í© ë´ ììì ìì ë°ë¼ íì ì íì¸ ì ê·¼ ìê°ì ì ê³µíë" ë§µì 구íí´ì¼ íë¤ê³ 기ì ëì´ ììµëë¤.
ë°ë¼ì ë³µì¡ì±ì´ O(N)ë³´ë¤ ë ëì ê²½ì° ë´ë¶ì ì¼ë¡ í´ì í
ì´ë¸(O(1) 룩ì
), ê²ì í¸ë¦¬(O(log(N)) 룩ì
) ëë 기í ë°ì´í°
êµ¬ì¡°ë¡ ííë ì ììµëë¤.
í¤ ëì¼ì±
ê° ëì¼ì±ì SameValueZeroì
기ë°ì¼ë¡ í©ëë¤.(0ê³¼ -0ì ë¤ë¥´ê² ì·¨ê¸íë ë±ê° ê°ìì
ì¬ì©íììµëë¤. ë¸ë¼ì°ì í¸íì±ì íì¸í´ë³´ì¸ì). ì¦, NaN !== NaNìë ë¶êµ¬íê³
NaNì NaNê³¼ ëì¼íê² ê°ì£¼ëë©°, ë¤ë¥¸ 모ë ê°ì === ì°ì°ìì ìë¯¸ë¡ ì ë°ë¼ ëì¼íê² ê°ì£¼ë©ëë¤.
ê°ì²´ vs ë§µ
Objectë Mapê³¼ ì ì¬í©ëë¤. ë ë¤ ê°ì ê°ë¦¬í¤ë í¤ë¥¼ ì¤ì íê³ , í´ë¹ ê°ì ë°ìì¤ë©°, í¤ë¥¼ ìì íë©°,
í¤ì 무ì¸ê°ê° ì ì¥ëìëì§ ì¬ë¶ë¥¼ ì ì ììµëë¤. ì´ë¬í ì´ì ë¡ (ê·¸ë¦¬ê³ ëìì¼ë¡ ì¬ì©í ì ìë ë´ì¥ ê°ì²´ê° ìì기 ë문ì)
Objectë ìì¬ì ì¼ë¡ Mapì¼ë¡ ì¬ì©ëì´ ììµëë¤.
ê·¸ë¬ë ê²½ì°ì ë°ë¼ìë ìëì ê°ì´ Mapì´ ì í¸ëë ì¤ìí ì°¨ì´ì ì´ ììµëë¤.
| Map | Object | |
|---|---|---|
| ì°ë°ì í¤ |
Mapë 기본ì ì¼ë¡ í¤ë¥¼ í¬í¨íì§ ììµëë¤. ì¬ê¸°ìë ëª
ìì ì¼ë¡ ì
ë ¥ë ë´ì©ë§ í¬í¨ë©ëë¤.
|
ì°¸ê³ :
ì´ë |
| ë³´ì |
Mapì ì¬ì©ìê° ì ê³µíë í¤ì ê°ì ëí´ì ìì íê² ì¬ì©í ì ììµëë¤.
|
ì¬ì©ìê° ì ê³µí í¤-ê° ìì |
| í¤ ì í |
Mapì í¤ë 모ë ê°(í¨ì, ê°ì²´ ëë ììê° í¬í¨)ì´ ë ì ììµëë¤.
|
Objectì í¤ë String ëë Symbolì´ì¬ì¼ í©ëë¤.
|
| í¤ ìì |
|
ì¼ë°ì ì¸
ììë ECMAScript 2015ììë§ ìì²´ ìì±ì ëí´ ì²ì ì ìëììµëë¤.
ECMAScript 2020ì ììë ìì±ì ììë ì ìí©ëë¤.
OrdinaryOwnPropertyKeys
ì
EnumerateObjectProperties
ì¶ì ëª
ì¸ìì
ì ì°¸ê³ íì기 ë°ëëë¤. ê·¸ë¬ë ê°ì²´ì 모ë ìì±ì ë°ë³µíë ë¨ì¼ ë©ì»¤ëì¦ì ììµëë¤. ë¤ìí ë©ì»¤ëì¦ìë ê°ê° ë¤ë¥¸ ìì± íì ì§í©ì´ í¬í¨ë©ëë¤
( |
í¬ê¸° |
Mapì ìì´í
ì ìë size ìì±ìì ì½ê² ê°ì ¸ì¬ ì ììµëë¤.
|
Objectì ìì´í
ìë ìëì¼ë¡ ê²°ì í´ì¼ í©ëë¤.
|
| ìí |
Mapì
ìíê°ë¥(iterable)í기 ë문ì ì´ë¯ë¡ ì§ì ë°ë³µí ì ììµëë¤.
|
ì°¸ê³ :
|
| ì±ë¥ |
í¤-ê° ìì ë¹ë²í ì¶ê° ë° ì ê±°ì ê´ë ¨ë ìí©ììë ì±ë¥ì´ ì¢ ë ì¢ìµëë¤. |
í¤-ê° ìì ë¹ë²í ì¶ê° ë° ì ê±°ì ìµì íëì§ ìììµëë¤. |
| Serialization and parsing |
ì§ë ¬í ëë 구문 ë¶ìì ëí 기본 ì§ìì´ ììµëë¤.
(íì§ë§ |
|
ê°ì²´ ìì± ì¤ì í기
ê°ì²´ ìì± ì¤ì ì Map ê°ì²´ììë ìëíì§ë§ ìë¹í í¼ëì ì¼ê¸°í ì ììµëë¤.
ë°ë¼ì ì´ë ë¤ìê³¼ ê°ì ë°©ìì¼ë¡ ëìíë ê²ì²ë¼ ë³´ì ëë¤.
const wrongMap = new Map();
wrongMap["bla"] = "blaa";
wrongMap["bla2"] = "blaaa2";
console.log(wrongMap); // Map { bla: 'blaa', bla2: 'blaaa2' }
ê·¸ë¬ë ìì±ì ì¤ì íë ë°©ë²ì Map ë°ì´í° 구조ì ìí¸ ìì©íì§ ììµëë¤. ìì± ì¤ì ì ì¼ë° ê°ì²´ì 기ë¥ì ì¬ì©í©ëë¤. 'bla' ê°ì ì§ì를 ìí Mapì ì ì¥ëì§ ììµëë¤. ë°ì´í°ì ëí ë¤ë¥¸ ìì ë ìëì ê°ì´ ì¤í¨í©ëë¤.
wrongMap.has("bla"); // false
wrongMap.delete("bla"); // false
console.log(wrongMap); // Map { bla: 'blaa', bla2: 'blaaa2' }
ë§µì ë°ì´í°ë¥¼ ì ì¥íë ì¬ë°ë¥¸ ë°©ë²ì set(key, value) ë©ìë를 ì¬ì©íë ê²ì
ëë¤.
const contacts = new Map();
contacts.set("Jessie", { phone: "213-555-1234", address: "123 N 1st Ave" });
contacts.has("Jessie"); // true
contacts.get("Hilary"); // undefined
contacts.set("Hilary", { phone: "617-555-4321", address: "321 S 2nd St" });
contacts.get("Jessie"); // {phone: "213-555-1234", address: "123 N 1st Ave"}
contacts.delete("Raymond"); // false
contacts.delete("Jessie"); // true
console.log(contacts.size); // 1
ìì±ì
Map()-
ìë¡ì´
Mapê°ì²´ë¥¼ ìì±í©ëë¤.
ì ì ìì±
get Map[@@species]-
íì ê°ì²´ë¥¼ ë§ëë ë° ì¬ì©ëë ìì±ì í¨ìì ëë¤.
ì¸ì¤í´ì¤ ìì±
Map.prototype[@@toStringTag]-
@@toStringTagìì±ì ì´ê¸° ê°ì 문ìì´"Map"ì ëë¤. ì´ ìì±ìObject.prototype.toString()ìì ì¬ì©í©ëë¤. Map.prototype.size-
Mapê°ì²´ì í¤/ê° ìì ì«ì를 ë°íí©ëë¤.
ì¸ì¤í´ì¤ ë©ìë
Map.prototype.clear()-
Mapê°ì²´ìì 모ë í¤-ê° ìì ì ê±°í©ëë¤. Map.prototype.delete()-
Mapê°ì²´ì í´ë¹ ììê° ì¡´ì¬íë©° ìì ëìì ê²½ì°true를 ë°ííë©° í´ë¹ ììê° ì¡´ì¬íì§ ìë ê²½ì°false를 ë°íí©ëë¤. ì´ ì´íìmap.has(key)를 ì¤ííë©´false를 ë°íí ê²ì ëë¤. Map.prototype.get()-
주ì´ì§ í¤ì í´ë¹íë ê°ì ë°ííê±°ë ê°ì´ ìë¤ë©´
undefinedì ë°íí©ëë¤. Map.prototype.has()-
주ì´ì§ í¤ì ì°ê´ë ê°ì´
Mapê°ì²´ì ì¡´ì¬íëì§ ì¬ë¶ë¥¼ ë¶ë¦¬ì¸ ê°ì¼ë¡ ë°íí©ëë¤. Map.prototype.set()-
Mapê°ì²´ìì ì ë¬ë í¤ì ê°ì ì¤ì í©ëë¤.Mapê°ì²´ë¥¼ ë°íí©ëë¤. Map.prototype[@@iterator]()-
Mapê°ì²´ì ì½ì ë ììì ë°ë¼[key, value]ë ê°ì ë©¤ë² ë°°ì´ì í¬í¨íë ìë¡ì´ ë°ë³µì를 ë°íí©ëë¤. Map.prototype.keys()-
Mapê°ì²´ì ì½ì ë ììì ë°ë¼ ê° ììì í¤ë¥¼ í¬í¨íë ìë¡ì´ ë°ë³µì를 ë°íí©ëë¤. Map.prototype.values()-
Mapê°ì²´ì ì½ì ë ììì ë°ë¼ ê° ììì ê°ì í¬í¨íë ìë¡ì´ ë°ë³µì를 ë°íí©ëë¤. Map.prototype.entries()-
Mapê°ì²´ì ì½ì ë ììì ë°ë¼[key, value]ë ê°ì ë©¤ë² ë°°ì´ì í¬í¨íë ìë¡ì´ ë°ë³µì를 ë°íí©ëë¤. Map.prototype.forEach()-
Mapê°ì²´ì ì¡´ì¬íë ê° í¤-ê° ìì ëí´ ì½ì ììëë¡callbackFnì í ë²ì© í¸ì¶ í©ëë¤. ë§ì½forEachí¸ì¶ ìthisArg매ê°ë³ìê° ìë¤ë©´ ê° ì½ë°±ìthisê°ì¼ë¡ ì¬ì©ë©ëë¤.
ìì
>Map ê°ì²´ ì¬ì©í기
const myMap = new Map();
const keyString = "a string";
const keyObj = {};
const keyFunc = function () {};
// ê° ì¤ì
myMap.set(keyString, "value associated with 'a string'");
myMap.set(keyObj, "value associated with keyObj");
myMap.set(keyFunc, "value associated with keyFunc");
console.log(myMap.size); // 3
// ê° ë¶ë¬ì¤ê¸°
console.log(myMap.get(keyString)); // "value associated with 'a string'"
console.log(myMap.get(keyObj)); // "value associated with keyObj"
console.log(myMap.get(keyFunc)); // "value associated with keyFunc"
console.log(myMap.get("a string")); // "value associated with 'a string'", ìëíë©´ keyString === 'a string'
console.log(myMap.get({})); // undefined, ìëíë©´ keyObj !== {}
console.log(myMap.get(function () {})); // undefined, ìëíë©´ keyFunc !== function () {}
Map í¤ë¡ NaN ì¬ì©í기
NaNë í¤ë¡ ì¬ì©í ì ììµëë¤. 모ë NaNì´ ìì ê³¼ ê°ì§ë ìì§ë§(NaN !== NaNì ì°¸ì
ëë¤), NaNì ìë¡ êµ¬ë³í ì ì기 ë문ì ë¤ìê³¼ ê°ì ììê° ëìí©ëë¤.
const myMap = new Map();
myMap.set(NaN, "not a number");
myMap.get(NaN);
// "not a number"
const otherNaN = Number("foo");
myMap.get(otherNaN);
// "not a number"
for...ofë¡ ë§µ ìíí기
ë§µì for...of ë°ë³µì ì¬ì©íì¬ ìíí ì ììµëë¤.
const myMap = new Map();
myMap.set(0, "zero");
myMap.set(1, "one");
for (const [key, value] of myMap) {
console.log(`${key} = ${value}`);
}
// 0 = zero
// 1 = one
for (const key of myMap.keys()) {
console.log(key);
}
// 0
// 1
for (const value of myMap.values()) {
console.log(value);
}
// zero
// one
for (const [key, value] of myMap.entries()) {
console.log(`${key} = ${value}`);
}
// 0 = zero
// 1 = one
forEach()ë¡ ë§µ ìíí기
ë§µì forEach() ë©ìë를 ì¬ì©íì¬ ìíí ì ììµëë¤.
myMap.forEach((value, key) => {
console.log(`${key} = ${value}`);
});
// 0 = zero
// 1 = one
ë°°ì´ ê°ì²´ìì ê´ê³
const kvArray = [
["key1", "value1"],
["key2", "value2"],
];
// Use the regular Map constructor to transform a 2D key-value Array into a map
const myMap = new Map(kvArray);
console.log(myMap.get("key1")); // "value1"
// Use Array.from() to transform a map into a 2D key-value Array
console.log(Array.from(myMap)); // Will show you exactly the same Array as kvArray
// A succinct way to do the same, using the spread syntax
console.log([...myMap]);
// Or use the keys() or values() iterators, and convert them to an array
console.log(Array.from(myMap.keys())); // ["key1", "key2"]
ë§µ ë³µì í기ì ë³í©í기
Arrayì ê°ì´ Mapì ë³µì ê° ê°ë¥í©ëë¤.
const original = new Map([[1, "one"]]);
const clone = new Map(original);
console.log(clone.get(1)); // one
console.log(original === clone); // false (useful for shallow comparison)
ì°¸ê³ : ë°ì´í° ìì²´ë ë³µì ê° ìëë¤ë ì¬ì¤ì ëª ì¬íì ì¼ í©ëë¤.
ë§µì í¤ ì ì¼ì±ì ì ì§íì±ë¡ ë³í©ì´ ê°ë¥í©ëë¤.
const first = new Map([
[1, "one"],
[2, "two"],
[3, "three"],
]);
const second = new Map([
[1, "uno"],
[2, "dos"],
]);
// ë ë§µì ë³í©í©ëë¤. í¤ ê°ì´ ì¤ë³µë ê²½ì° ë§ì§ë§ í¤ì ê°ì ë°ë¦
ëë¤.
// ì ê° ë¬¸ë²ì ë§µì ë°°ì´ë¡ ë³íí©ëë¤.
const merged = new Map([...first, ...second]);
console.log(merged.get(1)); // uno
console.log(merged.get(2)); // dos
console.log(merged.get(3)); // three
ë§µì ë°°ì´ê³¼ ë³í©ë ì ììµëë¤.
const first = new Map([
[1, "one"],
[2, "two"],
[3, "three"],
]);
const second = new Map([
[1, "uno"],
[2, "dos"],
]);
// ë§µì ë°°ì´ë¡ ë³í©í기. ì¤ë³µë í¤ê° ìë¤ë©´ ë§ì§ë§ì ë³í©ë ë§µì í¤ì í´ë¹íë ê°ì´ ì¤ì ë©ëë¤.
const merged = new Map([...first, ...second, [1, "eins"]]);
console.log(merged.get(1)); // eins
console.log(merged.get(2)); // dos
console.log(merged.get(3)); // three
ëª ì¸
| Specification |
|---|
| ECMAScript® 2026 Language Specification > # sec-map-objects > |