ความแตกต่างระหว่างแผนที่และจุดอ่อน
กลไกการทำงานของ Map และ WeakMap เหมือนกันแต่มีความแตกต่างกันเล็กน้อย
1) จุดอ่อน ยอมรับเฉพาะวัตถุที่เป็นกุญแจในขณะที่ แผนที่ นอกจากวัตถุแล้ว ยังยอมรับประเภทข้อมูลพื้นฐาน เช่น สตริง ตัวเลข เป็นต้น
2) จุดอ่อน ออบเจ็กต์จะไม่ป้องกันการรวบรวมขยะหากไม่มีการอ้างอิงถึงอ็อบเจ็กต์ที่ทำหน้าที่เหมือนคีย์ ดังนั้นจึงไม่มีวิธีการดึงคีย์ใน WeakMap ในขณะที่อยู่ใน แผนที่ มีวิธีเช่น Map.prototype.keys() เพื่อรับกุญแจ
3) ไม่มีคุณสมบัติขนาดอยู่ใน WeakMap .
แผนที่
ใช้เพื่อเชื่อมโยงคีย์กับค่าโดยไม่คำนึงถึงประเภทข้อมูล เช่น สตริง ตัวเลข วัตถุ ฯลฯ
ตัวอย่าง
<html> <body> <script> // Creates a new Map object var map = new Map(); // Defines an object that will be used a key in the ma var objKey = {name: 'tutorialspoint'}; document.write("</br>"); // Adds a new element having a String as its key and a String as its value map.set('first', 'a'); document.write("</br>"); // Adds a new element having a Number as its key and an Array as its value map.set(3, ['c']); document.write("</br>"); // Adds a new element having an Object as its key and a Number as its value map.set(objKey, 3); // Adds a new element having an Array as its key and a String as its value map.set(['add', 'mapping'], 'd'); // Checks whether an element having a key of "2" exists in the map. document.write(map.has(2)); document.write("</br>"); // Checks whether an element having a key of "first" exists in the map. document.write(map.has('first')); document.write("</br>"); // Retrieves the element having key of "first". Prints "a" document.write(map.get('first')); document.write("</br>"); // Retrieves the element having as a key the value of objKey. document.write(map.get(objKey)); document.write("</br>"); // Retrieves the element having key of "empty". Prints "undefined" document.write(map.get('empty')); document.write("</br>"); // Retrieves the map size. Prints "4" document.write(map.size); document.write("</br>"); // deletes all the value map.clear(); document.write(map.size); </script> </body> </html>
ผลลัพธ์
false true a 3 undefined 4 0
จุดอ่อน
ในตัวอย่างด้านล่าง เราจะพบว่า WeakMap รับเฉพาะวัตถุแต่ไม่รับค่าดั้งเดิมใดๆ (สตริง, ตัวเลข)
ตัวอย่าง
<html> <body> <script> // Creates a new WeakMap object var weakMap = new WeakMap(); // Defines an object that will be used a key in the map var obj4 = {d: 4}; // Defines another object that will be used a key in the map var obj5 = {e: 5}; // Adds a new element having an Object as its key and a String as its value weakMap.set(obj4, 'fourth'); // Adds a new element having an Object as its key and a String as its value weakMap.set(obj5, 'fifth'); // Adds a new element having a Function as its key and a Number as its value weakMap.set(function(){}, 7); // Checks whether an element having as its key the value of objKey4 exists in the weak map. document.write(weakMap.has(obj4)); document.write("</br>"); // Retrieve the value of element associated with the key having the value of objKey4. Prints "first" document.write(weakMap.get(obj4)); document.write("</br>"); // Deletes the element having key of objKey4. Prints "true" document.write(weakMap.delete(obj4)); document.write("</br>"); // Deletes all the elements of the weak map weakMap.clear(); </script> </body> </html>
ผลลัพธ์
true fourth true