今天一樣還是在 Chapter6 物件相關的內容裡打滾XD
昨天剛提到 Map 那就不得不提到 Set
Set 是值的集合(collection of values),最小的單位是單個值(value),在 Set 中,每個值僅能出現一次,不可以有重複的值,值可以是任何類型(type)
另外 array 雖然跟 set 長得很像,但它們是兩種不同東西
array.includes()
跟 array.indexOf()
其效率為 O(n)
以下為 Set 跟 Map 的比較
Name | set | map |
---|---|---|
Smallest unit | single value with any type | key-value pairs,key and value can be any type |
Feature | value is unique | key is unique, while the value don't. And can accept different key point to same value. |
Usage | handle unique values efficiently / check value existence in large value collections | store key-value pairs which key is any type |
Iterator Method | set is iterable, can use for..of to iterate |
Map is iterable, can use for..of to iterate |
Efficiency of Finding Value | In js, a Set has O(1) to look up specific value | In js, a Map has O(1) to look up specific value |
跟 map 類似,建立新的空set為 new Set()
用 nameOfSet.add( value )
來設定值
let customSet = new Set();
customSet.add(function greet() {
console.log("hello world");
});
customSet.add("Charle");
customSet.add(12);
console.log(customSet);
另外因為 Set 內的值有獨一無二的特性,因此可用來踢除陣列中重複的值
用 new Set(nameOdArray)
來建立 Set
const names = [
"Andrew",
"Danny",
"Neil",
"Bobby",
"Ben",
"Neil",
"Bob",
"Danny",
"Emma",
];
const setOfNames = new Set(names);
console.log(setOfNames); // 重複的值被踢除
nameOfSet.add( value )
nameOfSet.delete( value )
nameOfSet.size
nameOfSet.has( value )
nameOfSet.clear()
讓多個介面使用相同的屬性名稱或方法名稱,相同名稱的方法在不同類別的物件而執行不同的動作
The ability of different objects to respond to the same method name in their own unique ways.
舉例來說
有個 speak method
狗物件執行 speak() 會發出 'woof'
貓物件執行 speak() 會發出 'meow'
牛物件執行 speak() 會發出 'moo'
所有物件都分享相同名稱的方法,但每個物件都表現出不一樣的結果,這就是 polymorphism
舉例來說
makeSpeak 函式抽象化了『不同動物說話』的邏輯,且不同動物物件可以呼叫該函式達到不同叫聲的結果
function makeSpeak(animal){
animal.speak();
}
makeSpeak(dog);
makeSpeak(cat);