- ES6 教程
- ES6 - 首頁
- ES6 - 概述
- ES6 - 環境
- ES6 - 語法
- ES6 - 變數
- ES6 - 運算子
- ES6 - 決策
- ES6 - 迴圈
- ES6 - 函式
- ES6 - 事件
- ES6 - Cookie
- ES6 - 頁面重定向
- ES6 - 對話方塊
- ES6 - void 關鍵字
- ES6 - 頁面列印
- ES6 - 物件
- ES6 - 數字
- ES6 - 布林值
- ES6 - 字串
- ES6 - Symbol
- ES6 - 新的字串方法
- ES6 - 陣列
- ES6 - 日期
- ES6 - 數學
- ES6 - 正則表示式
- ES6 - HTML DOM
- ES6 - 迭代器
- ES6 - 集合
- ES6 - 類
- ES6 - Map 和 Set
- ES6 - Promise
- ES6 - 模組
- ES6 - 錯誤處理
- ES6 - 物件擴充套件
- ES6 - Reflect API
- ES6 - Proxy API
- ES6 - 驗證
- ES6 - 動畫
- ES6 - 多媒體
- ES6 - 除錯
- ES6 - 圖片地圖
- ES6 - 瀏覽器
- ES7 - 新特性
- ES8 - 新特性
- ES9 - 新特性
- ES6 有用資源
- ES6 - 快速指南
- ES6 - 有用資源
- ES6 - 討論
ES6 - Map 和 Set
ES6 引入了兩種新的資料結構——Map 和 Set。讓我們詳細瞭解一下它們。
Map
Map 是一個有序的鍵值對集合。Map 類似於物件。但是,Map 和物件之間存在一些區別。這些列在下面:
| 序號 | 物件 | Map |
|---|---|---|
| 1 | 鍵不能是物件型別 | 鍵可以是任何型別 |
| 2 | 鍵是無序的 | 鍵是有序的 |
| 3 | 不可迭代 | 可迭代 |
語法
Map 的語法如下:
let map = new Map([iterable]) let map = new Map()
示例
以下示例使用可迭代建構函式建立一個 Map:
<script>
let andy = {ename:"Andrel"},
varun = {ename:"Varun"},
prijin = {ename:"Prijin"}
let empJobs = new Map([
[andy,'Software Architect'],
[varun,'Developer']]
);
console.log(empJobs)
</script>
以上程式碼的輸出如下:
{{…} => "Software Architect", {…} => "Developer"}
檢查 Map 的大小
size 屬性可用於確定 Map 中儲存的值的數量。
語法
檢查 Map 大小的語法如下:
map_name.size
示例
<script>
let daysMap = new Map();
daysMap.set('1', 'Monday');
daysMap.set('2', 'Tuesday');
daysMap.set('3', 'Wednesday');
console.log(daysMap.size);
</script>
以上程式碼的輸出如下:
3
以下是一些可用於操作 Map 的常用方法:
| 序號 | 物件 & Map |
|---|---|
| 1 |
set(key,value)
向 Map 新增鍵和值 |
| 2 |
get(key)
如果鍵匹配則返回值 |
| 3 |
has(key)
如果存在具有指定鍵的元素,則返回 true;否則返回 false |
| 4 |
keys()
返回一個迭代器,其中包含 Map 物件中每個元素的鍵 |
| 5 |
values()
返回一個迭代器,其中包含 Map 物件中每個元素的值 |
| 6 |
entries()
返回一個迭代器,其中包含 Map 中每個元素的鍵值對 |
| 7 |
delete(key)
從 Map 物件中刪除指定的元素 |
WeakMap
WeakMap 是 Map 的一個小的子集。鍵是弱引用的,因此它只能是非原始的。如果對物件鍵沒有引用,則它將被垃圾回收。
- 不可迭代
- 每個鍵都是物件型別
如果鍵沒有引用,WeakMap 將允許垃圾回收。
語法
WeakMap 的語法如下:
new WeakMap([iterable])
示例 1
<script> let emp = new WeakMap(); emp.set(10,'Sachin');// TypeError as keys should be object </script>
示例 2
<script>
let empMap = new WeakMap();
// emp.set(10,'Sachin');// Error as keys should be object
let e1= {ename:'Kiran'},
e2 = {ename:'Kannan'},
e3 = {ename:'Mohtashim'}
empMap.set(e1,1001);
empMap.set(e2,1002);
empMap.set(e3,1003);
console.log(empMap)
console.log(empMap.get(e2))
console.log(empMap.has(e2))
empMap.delete(e1)
console.log(empMap)
</script>
以上程式碼的輸出如下:
{{…} => 1002, {…} => 1003, {…} => 1001}
1002
true
{{…} => 1002, {…} => 1003}
Set
Set 是一個無序的唯一值集合。此資料結構可以包含原始型別和物件型別的值。
語法
Set 的語法如下:
new Set([iterable]) new Set()
示例
<script> let names = new Set(['A','B','C','D']); console.log(names) </script>
以上程式碼的輸出如下:
{"A", "B", "C", "D"}
檢查 Set 的大小
Set 物件的 size 屬性可用於查詢 Set 中的元素數量。
語法
檢查 Set 大小的語法如下:
set.size
示例
<script> let names = new Set(['A','B','C','D']); console.log(names.size) </script>
以上程式碼的輸出如下:
4
迭代 Set
我們可以使用forEach 和for...of 迴圈來迭代 Set。這在下面的示例中顯示:
示例
<script>
let names= new Set(['A','B','C','D']);
//iterate using forEach
console.log('forEach')
names.forEach(n=>console.log(n))
console.log('for of..')
//iterate using for..of
for(let n of names){
console.log(n)
}
</script>
以上程式碼的輸出如下:
forEach A B C D for of.. A B C D
以下方法可用於操作 Set:
| 序號 | 物件 & Map |
|---|---|
| 1 |
add(element)
向 Set 新增元素 |
| 2 |
has(element)
如果找到元素則返回 true;否則返回 false |
| 3 |
delete(element)
從 Set 中刪除特定元素 |
| 4 |
clear()
清除 Set 中的所有元素 |
WeakSet
WeakSet 弱持有物件,這意味著如果儲存在 WeakSet 中的物件沒有被引用,則它們將被垃圾回收。WeakSet 不可迭代,並且沒有get 方法。
<script>
let e1 = {ename:'A'}
let e2 ={ename:'B'}
let e3 ={ename:'C'}
let emps = new WeakSet();
emps.add(e1);
emps.add(e2)
.add(e3);
console.log(emps)
console.log(emps.has(e1))
emps.delete(e1);
console.log(emps)
</script>
以上程式碼的輸出如下:
WeakSet {{…}, {…}, {…}}
true
WeakSet {{…}, {…}}