在學習JavaScript的數據類型的時候,比較陌生的是Map和Set。[Map和Set是JavaScript的數據類型]
Map
在學習Map的時候,你可以把Map類比爲OC裏面的Dictionary。在Javascript中,默認的對象表示方式是在"{""}"中存儲鍵值對,比方說{"name":"wu","age":23},但是對象裏面的Key必須是字符串,這使得其有了侷限性,因爲數字(比如學號)等其他數據類型也應該可以作爲對象的Key。所以在ES6規範中引入了Map。[並不是所有的瀏覽器都支持ES6]
eg:
var m = new Map([["JayZhou,37"],["AndyLiu,56"]]);
m.get("JayZhou"); //-->37
初始化Map需要一個二維數組,這與OC裏面Dictionary的初始化是有區別的,但是二者的功用差不多
下面是申明一個空的Map,再對其進行操作:
var m = new Map();
m.set(37,"me"); //添加一個鍵值對
m.get(37); <span style="white-space:pre"> </span>//-->"me"
m.has("AndyLiu"); //判斷該Map裏面是否包含鍵"AndyLiu" flase
m.delete("JayZhou"); //刪除
Set
Set和Map類似,也是一組集合,但是Set不存儲Value。並且Set中不應該出現重複的Key。
eg:
var set1 = new Set(); //空的Set
s.add(2); //添加Key 2
s.add(3); //添加Key 3
s.add("2"); //添加Key "2"
s.add(2); //添加Key 2 無效果 s{2,3,"2"}
var set2 = new Set([1,2,3]);
s.add(2);
s.delete(2);
iterable
for...of
就像OC裏面array、set、dictionary統稱集合一樣,JavaScript裏面Map、Set、Array都屬於iterable類型。iterable類型統一用for...of循環遍歷,Array可以採用下標遍歷。
for...of是ES6引入的,並不是所有的瀏覽器都支持。[爲啥不用for...in遍歷,for...in遍歷的是對象的屬性名稱,for...of遍歷的是遍歷的是集合本身的元素]
eg:
var map1 = new Map([["name","wu"],["age",23]]);
for (var x of map1) { //遍歷map1,map1是2維數組,x爲數組
alert(x[0]); //x[0]爲key,x[1]爲value
}
var array1 = ["name",23,"age"];
array1.great = 3; //數組實際也是一個對象,爲array1添加一個新屬性
for (var x of array1) { //遍歷array1,array1是1維數組
alert(x); //x分別爲"name"、23、"age"
}
for (var x in array1) {
alert(x); //x分別爲"name"、23、"age"、3
}
forEach
iterable內置的方法,參數爲一個函數,forEach其實是一個高階函數,對iterable進行遍歷
eg:
var array1 = ["1","2"];
array1.forEach(function (element,index,array){
alert(element); //當前的元素"1","2"
alert(index); //當前的索引0,1
alert(array); //自身
});
var set1 = new Set([1,2]);
set1.forEach(function (element,sameElement,set){
alert(element); //當前的元素
alert(sameElement); //當前的元素,set是沒有index的
alert(set); //自身
});
var map1 = new Map([["name","wu"],["age",23]]);
map1.forEach(function (value,key,map){
alert(value); //當前的鍵值"wu",23
alert(key); //當前的鍵"name","age"
alert(map); //自身
});
forEach裏面的function的參數可以省略你不想要的。