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);

});

 

 

 

 

你可能感兴趣的:(javascript相关)