JS对象
- JS对象是一种集合数据类型,有若干的键值对组成,访问一个不存在的数据类型返回undefined,可以自由的添加删除属性,属性以‘,’结束,最后一个属性不用写‘,’
var xiaoming = {
name:'小明',
age:18
};
xiaoming.school;//undefined
xiaoming.school = 1;
xiaoming.school;//返回1
delete xiaoming.age; // 删除age属性
xiaoming.age; // undefined
//可以用in来检测相关属性
'name' in xiaoming;//返回true
//或者是用hasOwnProperty()
xiaoming.hasOwnProperty('name');//true
JS的条件判断
- 使用if() else()来进行判断,循环for(与java用法类似)或是for..in,for..of的用法(在后文会提到)和while
var a = {
name:'Jack',
age:20,
city:'BeiJing'
};
for(var key in a){
console.log(key);//'name', 'age', 'city'
}
var array = [1,2,3];
for(var i in array){
console.log(i);//'0','1','2'
console.log(array[i]);//1,2,3
}
Map和Set
Map是一组键值对结构,查找速度较快.因为在JS对象中键的结构只能是String,所以在ES6中新引入了map
var m = new Map([['A',85],['B',75],['C',95]]);
m.get('A');//85
var a = new Map();//初始化一个空Map
a.set('A',85);//添加一个新的key-value
a.set('B',95);
a.has('A');//询问是否存在key‘A’:true
m.get('A');85,获得A的值
m.delete('A');删除‘A’的键值对
- 一个key只能对应一个value,后来的value会替换当前的value
- 看到一个很形象的比如,在讨论同样是为键值对类型的object和Map时,就像是唐伯虎点秋香里众多盖着盖头的姑娘,在object的情况需要一个一个去掀开盖头去访问,而在Map中则是大家直接以真面目示人,可以进行快速的查找。做出这个比喻的大神也真的很厉害了。
从定义的角度来看,object中需要获取值是通过对象.属性来访问的,Map中则是通过get方法来访问内部的值。 - Set 是一组key的集合,但不存储value,且key不会重复,如有重复的则会被自动过滤掉。要想创建一个Set需要提供一个array作为输入或者是直接初始化一个空Set
var s1 = new Set();//初始化一个空Set
var s2 = new Set([1,2,3]);
s1.add(4);//将4添加到s1中
s1.delete(4);//将4从s1当中删除
iterable类型
iterable:遍历Array可以采用下标循环,遍历Map和Set就无法使用下标。为了统一集合类型,ES6标准引入了新的iterable类型,Array、Map和Set都属于iterable类型。具有iterable类型的集合可以通过新的for ... of循环来遍历。
- 首先还是需要注意for in和for of他的区别到底是什么:
1.for in遍历的其实是对象的属性名称。Array数组实际上也是一个对象,每一个元素的索引被视为一个属性。当我们手动给Array对象添加额外的属性后:
var a = ['A', 'B', 'C'];
a.name = 'Hello';
for (var x in a) {
console.log(x); // '0', '1', '2', 'name'
}
for in将name包含在其中,但是Array.length属性却不包括name。
ps:如果将这个a写出来不知道是什么样的,待我细细研究
2.for of只循环集合本身的元素
var a = ['A', 'B', 'C'];
a.name = 'Hello';
for (var x of a) {
console.log(x); // '0', '1', '2', 'name'
}
3.forEach方法:iterable内置forEach方法,他接受到一个函数,每次迭代就自动回调该函数。
同样是用上述array
var a = ['A','B','C'];
a.forEach(function(element,index,array){
//element:指向当前元素的值
//index:指向当前索引
//array:指向Array对象本身
console.log(element+',index='+index);
})
输出:A,index = 0 B,index = 1 C, index = 2
- Set与Array类似,但Set没有索引,因此回调函数的前两个参数都是元素本身:
var s = new Set(['A', 'B', 'C']);
s.forEach(function (element, sameElement, set) {
console.log(element);
}); - Map的回调函数参数依次为value、key和map本身:
var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]);
m.forEach(function (value, key, map) {
console.log(value);
});//输出x,y,z