js相關語法基礎(3)字典(物件) 及遍歷迭代。
判斷一個物件中是否含有屬性 即是否含有某個key 可以用 in
但是toString 定義在object物件中,而物件最終都會在原型鏈上指向object,所以 toString存在於每個物件中 這時候可以使用
hasOwnProperty()方法。
var xiaoming = {
name: '小明'
};
console.log(xiaoming.hasOwnProperty('name')); // true
console.log(xiaoming.hasOwnProperty('toString')); // false
物件(字典)的迭代。
for(var key in xiaoming){
console.log(key);
console.log(xiaoming[key]);
}
js的字典有個小問題 那就是key必須是字串 但實際上number也是可以的。
最新的es6規範引用了map
var dic = new Map([[1,2],[3,4]]);
console.log(dic.get(1));
對應輸出2 1對應的值。
遍歷Array
可以採用下標迴圈,遍歷Map
和Set
就無法使用下標。為了統一集合型別,ES6標準引入了新的iterable
型別,Array
、Map
和Set
都屬於iterable
型別。
具有iterable
型別的集合可以通過新的for ... of
迴圈來遍歷。
for in 和 for of 區別
for ... in
迴圈由於歷史遺留問題,它遍歷的實際上是物件的屬性名稱。一個Array
陣列實際上也是一個物件,它的每個元素的索引被視為一個屬性。
當我們手動給Array
物件添加了額外的屬性後,for ... in
迴圈將帶來意想不到的意外效果:
var a = ['A', 'B', 'C'];
a.name = 'Hello';
for (var x in a) {
console.log(x); // '0', '1', '2', 'name'
}
console.log(a.length);
更好的方法是用iterable內建的forEach方法。
a.forEach(function(element,index,array){
console.log("元素",element);
console.log("索引",index);
console.log("陣列",array);
})
map迭代。
var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
m.forEach(function (value, key, map) {
console.log(value);
});
set的迭代
var s = new Set(['A', 'B', 'C']);
s.forEach(function (element, sameElement, set) {
console.log(element);
});