제17절: ES6에 추가된 맵과 WeakMap은 또 무엇입니까?

9265 단어
지난 절에서 Set과 WeakSet을 소개했는데, 이번 절에서 Map과 WeakMap은 무엇입니까?물론 둘 사이에는 필연적인 연관이 없고 단지 용법이 유사할 뿐이다.
맵이란?
Map이 무엇인지 설명하려면 Object 개체를 언급해야 합니다. 우리는 Object 개체가 키 값 쌍의 집합이라는 것을 알고 있습니다.

   //Object
   { "name":" ","gender":1}


ES5의 키 이름의 유형은 반드시 문자열이어야 한다. 물론 ES6는 속성 이름의 유형을 Symbol로 허용하고 11절에 설명이 있으니 클릭하여 볼 수 있다.
현재 ES6는 맵 구조를 제공하여 Object 대상과 비슷하지만 키 이름의 유형은 문자열 유형에 국한되지 않고 다양한 유형의 값일 수 있다.이것은 Object 대상보다 더욱 유연하다고 말할 수 있다. 물론 더욱 복잡하다.
 
Map의 기본 사용 방법
맵이 무엇인지 알았으니, 이어서 맵의 기본적인 용법을 배워서, 맵이 어떻게 사용되는지 보자.
Map 구조는 다음과 같은 인스턴스를 만들기 위해 new를 사용하는 구조 함수를 제공합니다.

   let m = new Map();


실례를 만드는 동시에 그 내용을 초기화하려면, 형식과 Set 구조 유형에 수조를 매개 변수로 사용할 수 있습니다. 한번 봅시다.

   let m = new Map([
           ["name"," "],
           ["gender",1]
   ]);
   
   console.log(m);
   // :Map {"name" => " ", "gender" => 1}


맵 () 방법의 매개 변수를 주의하십시오. 우선 이것은 하나의 수조이고, 그 안의 내용도 여러 개의 수조로 구성되어 있습니다.'name ':'전단군' 은 하나의 키 값 쌍으로 그것들을 하나의 수조에 포함합니다. ['name ':'전단군'], 다른 키 값 쌍도 마찬가지입니다: ['gender ': 1].이것이 Map 구조 인스턴스를 초기화하는 기본 쓰기 방법입니다.
 
인스턴스로 초기화하면 Map 구조는 인스턴스에 대한 작업을 수행할 수 있는 몇 가지 인스턴스 속성과 방법을 제공합니다.우리 함께 어떤 속성과 방법이 있는지 봅시다. 
set () 메서드
set () 방법 작용: 실례에 키 값 쌍을 설정하고 맵 실례를 되돌려줍니다.

   let m = new Map();
   //set

   // string
   m.set("name"," ");  
 
   //
   m.set(1,2);

   console.log(m);
   // :Map {"name" => " ", 1 => 2}


set 방법의 사용은 매우 간단합니다. 키와value를 키 이름과 키 값으로 전송하기만 하면 됩니다.주의: 세 번째 줄 코드에서 우리가 전송한 키는 숫자 1이다. 이것은 맵 구조가 문자열 형식이 아닌 키 이름을 저장할 수 있다는 것을 증명한다. 물론 다른 형식의 키 이름을 더 많이 설정할 수도 있다. 예를 들어:

   //
   m.set([1],2);

   //
   m.set({ "name":"Zhangsan"},2);

   //
   m.set(true,2);

   //Symbol
   m.set(Symbol('name'),2);

   //null
   m.set(null,2);

   //undefined
   m.set(undefined,2);


       
상기 6가지 유형의 값은 모두 키 이름으로 사용할 수 있으며 키 값을 성공적으로 추가할 수 있으며 문제가 없습니다.
set 방법을 사용할 때 주의해야 할 것이 하나 있습니다. 만약 존재하는 키 이름을 설정하면, 뒤의 키 값은 앞의 키 값을 덮어씁니다.프레젠테이션:

   let m = new Map();
   m.set("name"," ");
   console.log(m);
   // :Map {"name" => " "}

   // name
   m.set("name"," ");
   console.log(m);
   // :Map {"name" => " "}


상기 사례에서 우리는 처음으로name의 값을'전단군'으로 설정했다. set 방법으로name의 값을 다시 설정할 때 후자는 전자의 값을 덮어쓰는 데 성공했고 이때부터'전단군'은'옆집 왕'으로 바뀌었다.
get () 방법
get () 방법 작용: 지정한 키 이름의 키 값을 가져오고 키 값을 되돌려줍니다.

   let m = new Map([["name"," "]]);

   m.get("name");// :
   m.get("gender");// :undefined


get 방법의 사용도 간단합니다. 키 이름만 지정하면 됩니다.대응하는 키 값을 가져오고 키 값이 맞으면 키 값을 되돌려줍니다.그렇지 않으면undefined로 돌아가는 것도 이해하기 쉽다.
 
delete() 방법
delete () 방법 작용: 지정한 키 값 쌍을 삭제하고, 삭제가 성공적으로 되돌아왔습니다:true, 그렇지 않으면 되돌아왔습니다:false.

   let m = new Map();
   m.set("name"," ");
   // :Map {"name" => " "}

   m.delete("name");// :true
   m.delete("gender");// :false


"name"을 삭제하는 데 성공했고,true로 되돌아왔습니다.'gender'를 삭제할 때 맵 구조에'gender'라는 키 이름이 존재하지 않기 때문에 삭제에 실패하고false로 돌아갑니다.
 
clear () 방법
Set 구조와 마찬가지로 Map 구조도clear () 방법을 제공하여 모든 키 값을 한꺼번에 삭제할 수 있습니다.

   let m = new Map();
   m.set("name"," ");
   m.set("gender",1);

   m.clear();
   console.log(m);
   // :Map {}


clear 방법을 사용한 후에 우리는 변수 m을 다시 인쇄해 보았는데 아무것도 없는 빈 맵 구조를 발견했다.clear 방법이 작용했다는 것을 설명한다.
 
has () 방법
has() 메서드 역할: Map 인스턴스에 지정된 키 값 쌍이 있는지 판단하려면:true 를 반환하고 그렇지 않으면:false 를 반환합니다.

   let m = new Map();
   m.set("name"," ");

   m.has('name');// :true
   m.has('age');// :false


Map 실례에 키 이름이 있습니다:name,true를 되돌려줍니다. 키 이름age가 존재하지 않으면 false를 되돌려줍니다.이해하기 쉬워요.
 
누비다
Object 객체가 for될 수 있음...in 스트리밍, 맵 구조도 약하지 않고 스트리밍이 가능합니다.우리는 ES6의 새로운 기능을 사용할 수 있다.of 키 이름이나 키 값을 옮겨다니기.
entries () 방법
entries () 방법 작용: 실례적인 키 값을 되돌려줍니다.
우리가 13절에 말했지, for...of는 플러그인 인터페이스가 있는 대상을 훑어볼 수 있습니다.그럼, 우리는 포...of에서 맵 구조의 역행을 보여 줍니다.

   let m = new Map([
           ["name"," "],
           ["age",25]
   ]);

   for(let [key,value] of m.entries()){
        console.log(key+'  '+value);
   }
   // :name 
   //              age  25
   

사례의 m.entries () 는 키 값이 맞는 플러그인을 되돌려줍니다. for... 을 사용합니다.이 플러그인을 옮겨다니며 키와value에 값을 부여하고 컨트롤러에서 출력합니다.
기억나세요?이전 절에서 Set 구조의 스트리밍을 소개할 때도 이러한 스트리밍 방식이었다.
 
keys()와values() 방법
키 () 방법: 실례적인 모든 키 이름을 되돌려주는 플러그인입니다.
values () 방법: 모든 키 값을 실례적으로 되돌려주는 플러그인입니다.
이왕 역력기라면 for로...of 그것들을 두루 훑어봐라:
    
   let m = new Map([
       ["name"," "],
       ["age",25]
   ]);

   // keys
   for(let key of m.keys()){
        console.log(key);
   }
   // :name
   //                 age

   // values
   for(let value of m.values()){
        console.log(value);
   }
   // :
   //                 25
   

        
keys 방법과values 방법의 사용 방식은 일치하지만 되돌아오는 결과는 다르다.
 
forEach() 방법
다음 세 가지 방법을 사용하여 각 키 값 쌍에 forEach를 적용할 수도 있습니다.
    
   let m = new Map([
       ["name"," "],
       ["age",25]
   ]);
   
   m.forEach(function(value,key){
        console.log(key+':'+value);
   });
   // :name:
   //                 age:25
   

forEach 방법은 익명 함수를 받아들여 익명 함수에 value와 키를 전달한다. 각각 맵 실례의 키 이름과 키 값이다. 이 방법의 사용은 낯설지 않을 것이다.
크기 속성
그 중 자주 사용하는 속성 중 하나는 크기: 실례를 가져오는 구성원 수입니다.

   let m = new Map();
   m.set(1,3);
   m.set('1','3');

   m.size;// :2


set 방법을 사용하여 실례 m에 두 개의 키 값을 구성원에게 추가했기 때문에 실례의 크기는 다음과 같다.
 
WeakMap이란?
맵 구조를 이야기했는데, 우리는 지금 WeakMap 구조를 이야기한다.
WeakMap 구조와 Map 구조는 매우 유사한데 다른 점은 WeakMap 구조의 키 이름은 인용 형식의 데이터만 지원한다는 것이다.어떤 것이 인용 유형의 값입니까?예를 들어 수조, 대상, 함수.
인용 유형이 무엇인지에 관하여 그 중에서 전지와 전가의 차이가 언급되었는데 인테리어 장인과 왕사부의 예를 기억하십니까?3절에는 상세한 설명이 있으니 클릭하면 볼 수 있습니다.
 
WeakMap의 기본 사용 방법
WeakMap 구조는 Map 구조와 마찬가지로 사용됩니다.

   let wm = new WeakMap();


둘 다 new를 사용하여 실례를 만듭니다.키 값이 맞다면 set 방법을 사용하지만 키 이름의 형식은 인용 형식의 값을 요구해야 합니다. 한번 봅시다.

   let wm = new WeakMap();

   //
   wm.set([1],2);

   //
   wm.set({ 'name':'Zhangsan'},2);

   //
   function fn(){};
   wm.set(fn,2);

   console.log(wm);
   // :WeakMap {
           [1] => 2,
           Object {name: "Zhangsan"} => 2,
           function => 2
           }
               

인쇄 결과에서 알 수 있듯이 위 유형의 키 이름은 위크맵 실례에 성공적으로 추가되었습니다. 
WeakMap과 Map의 차이점
일반 값 유형에서는 허용되지 않습니다.예를 들어 문자열, 숫자,null,undefined, 볼 형식.맵 구조는 허용된다. 이것이 바로 양자의 차이점이다. 명심해라.
맵과 마찬가지로 WeakMap도 get,has,delete 방법을 가지고 있어 사용법과 용도가 모두 같다.다른 점은 WeakMap은clear 방법을 지원하지 않고, 반복도 지원하지 않으며, 키,values,entries,forEach 네 가지 방법도 없고, 속성 크기도 없다는 것이다.
이유는 WeakSet 구조와 같다. 키 이름의 인용 유형은 약한 인용이다. 이 인용 대상이 언제 쓰레기 회수 메커니즘에 의해 회수될지 영원히 알 수 없다. 만약 이 인용 유형의 값이 쓰레기 메커니즘에 의해 회수된다면 WeakMap 실례의 대응하는 키 값도 사라질 것이다.
이 절 소결
    
요약: 맵 구조는 키 값이 맞는 집합이다. Object 대상과 달리 맵 구조의 키 이름은 모든 종류의 값이 될 수 있지만 WeakMap 구조의 키 이름은 인용 유형의 값만 허용한다.
그것들은 개발자에게 각각의 방법과 속성을 제공했다. set, get,has,delete 등 같은 방법을 제공했다. 그 중에서 맵 구조에는clear 방법이 더 많아졌고size 속성과 반복하는 방법: 키,values,entries,forEach가 있다.

좋은 웹페이지 즐겨찾기