您好,登錄后才能下訂單哦!
Symbol 是一種獨特的且不可變的數據類型,用來標識對象屬性
要創建 Symbol,輸入 Symbol(),并添加一個可選的字符串作為其描述
const obj = Symbol("obj1");
const bowl = {
[Symbol('banana')]: { color: 'yellow', weight: 183.15 },
[Symbol('orange')]: { color: 'orange', weight: 170.097 },
[Symbol('banana')]: { color: 'yellow', weight: 176.845 }
};
console.log(bowl);
可迭代協議用來定義和自定義對象的迭代行為,靈活地指定循環訪問對象中的值的方式.
字符串和數組就是內置的可迭代類型
為了使對象可迭代,它必須實現可迭代接口,接口須包含默認的迭代器方法。該方法將定義對象如何被迭代
迭代器方法(可通過常量 [Symbol.iterator] 獲得)是一個無參數的函數,返回的是迭代器對象。迭代器對象是遵守迭代器協議的對象
迭代器協議用來定義對象生成一系列值的標準方式。實際上就是現在有了定義對象如何迭代的流程。通過執行 .next() 方法來完成這一流程。
當對象執行 .next() 方法時,就變成了迭代器。.next() 方法是無參數函數,返回具有兩個屬性的對象:
1)value:表示對象內值序列的下個值的數據
2)done:表示迭代器是否已循環訪問完值序列的布爾值
如果 done 為 true,則迭代器已到達值序列的末尾處。
如果 done 為 false,則迭代器能夠生成值序列中的另一個值。
const digits = [0, 1, 2, 3, 4];
for (const digit of digits) {
console.log(digit);
}//for of 進行迭代
const digits = [0, 1, 2, 3, 4]; //[Symbol.iterator]() 迭代器方法,返回無參函數
const arrayIterator = digits[Symbol.iterator]();
console.log(arrayIterator.next()); //Object {value: 0, done: false}
console.log(arrayIterator.next()); //Object {value: 1, done: false}
下面是對象屬性迭代的例子
const james = {
name: 'James',
height: `5'10"`,
weight: 185,
[Symbol.iterator](){
let keysArr = Object.keys(this);
let index = 0;
let obj = this;
return {
next(){
return {"value": obj[keysArr[index]],
"key": keysArr[index],
"done": Boolean(index++ >= keysArr.length-1)} ;
}
}
}
};
const iterator = james[Symbol.iterator]();
console.log(iterator.next().value); // 'James'
數據不重復的數組,但是不能通過索引訪問
const games = new Set(['Super Mario Bros.', 'Banjo-Kazooie', 'Mario Kart', 'Super Mario Bros.']);
console.log(games); //Set {'Super Mario Bros.', 'Banjo-Kazooie', 'Mario Kart'}
添加.add() 返回set ,如果添加重復項,不會報錯,也不會添加
刪除.delete() 返回boolean
刪除所有.clear() 沒有返回值
.size 屬性可以查看Set長度
.has() 方法可以檢查 Set 中是否存在某項(entry),返回boolean
.values() 方法可以返回 Set 中的值,返回值是 SetIterator 對象
使用for...of 循環遍歷Set.values();
const games = new Set(['Super Mario Bros.', 'Banjo-Kazooie', 'Mario Kart', 'Super Mario Bros.']);
for(let str of games.values()){ //for(let str of games) 效果一樣
console.log(str);
}
只能包含對象,不能迭代,沒有clean()
當集合中的對象為null時,自動回收.效率比set高
如果說 Set 類似于數組,那么 Map 就類似于對象,因為 Map 存儲鍵值對,和對象包含命名屬性及值相類似
.set() 方法添加鍵值(兩個參數)。第一個參數是鍵,用來引用第二個參數,即值
使用 .delete() 方法移除鍵值對
使用 .clear() 方法從 Map 中刪除所有鍵值對
使用 .has() 方法并向其傳入一個鍵來檢查 Map 中是否存在該鍵值對
通過向 .get() 方法傳入一個鍵,獲取 Map 中的值
使用 for...of 循環遍歷Map
WeakMap(弱映射)的行為和 WeakSet 的一樣,只是 WeakMap 處理的是鍵值對,而不是單個條目
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。