1. 程式人生 > >js相關語法基礎(3)字典(物件) 及遍歷迭代。

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可以採用下標迴圈,遍歷MapSet就無法使用下標。為了統一集合型別,ES6標準引入了新的iterable型別,ArrayMapSet都屬於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);

});