※集合
和java的Map和Set差不多,但方法名不同Map的key不重覆,後者會蓋前者; Set塞相同的資料,長度不會變長
沒有List,可能已經有Array了吧!
// map var map = new Map(); map.set("a", "1"); map.set("b", "2"); map.set("c", "3"); console.log(map.size); // 3 console.log(map.get("fox")); // undefined console.log(map.get("b")); // 2 console.log(map.has("b")); // true map.delete("b"); console.log(map.has("b")); // false for(let m of map) console.log(m); // ["a", "1"] ["c", "3"] map.set("a", 10); map.forEach(function(e, i, a){ console.log(e); // 10 3 }); // set var set = new Set(); set.add(1); set.add("a"); set.add("b"); console.log(set.size); // 3 console.log(set.has(1)); // true set.delete(1); console.log(set.has(1)); // false for (let s of set) console.log(s); // a b console.log(set.size); // 2 set.add("a"); console.log(set.size); // 2 set.forEach(function(e, i, a){ console.log(e); // a b });
※除了Map 和 Set 外,還有 WeakMap 和 WeakSet
WeakMap 的 key 只能塞物件,Map 無限制
WeakSet 只能放物件,Set 無限制
※ Iterator
※Symbol.iterator
var xxx = {}; // []也可以 xxx[Symbol.iterator] = function* () { yield 1; yield 2; yield 3; }; console.log([...xxx]); // [1, 2, 3]
※「*」一定要,可以不和function連在一起
※ Symbol.iterator是內鍵的,一個字都不能改,有這個才能用「...變數」
※yield就類似return,但它可以一直接起來
※沒辦法用lambda的寫法
※function*的yield、yield*和next()
function* gen() { yield* ["a", "b", "c"]; } const g = gen(); console.log(g.next()); // { value:"a", done:false } console.log(g.next()); // { value:"b", done:false } console.log(g.next()); // { value:"c", done:false } console.log(g.next()); // { value:undefined, done:true }
// 一次宣告多個變數和值
var [a, b, c] = new Set(["aa", "bb", "cc"]); console.log(a); // "aa" console.log(b); // "bb"
※回傳的done是內鍵的,表示完成了沒
※如果yield不加「*」,那結果是{value: Array[3], done: false},會將整個陣列裝起來,後面如果再呼叫next(),結果都是{value: undefined, done: true}
※最後的宣告改成Array,如var [a, b, c] = new Array(["aa", "bb", "cc"]);,
結果a會變成["aa", "bb", "cc"],後面的b和c都會變成undefined
※function的return
function* gen() { yield 1; yield 2; yield 3; } var g = gen(); console.log(g.next()); // { value: 1, done: false } console.log(g.next()); // { value: 2, done: false } console.log(g.return("xxx")); // { value: "xxx", done: true } console.log(g.next()); // { value: undefined, done: true }
※只要一return,後面的value就沒有了,done也變成true了,也就是說一return就算完成了
沒有留言:
張貼留言