可以用来遍历数组,
但是,
最好只用来遍历对象属性。
照理说,变量 i 在循环结束后不能再被获取(其他语言都是如此),但JavaScript嘛,ʅ(‾◡◝)ʃ
JavaScript中数组,又有很多“不同”:
数组的更多特性我们将在后面继续学习。
也可以算是if...else...的另一种写法:
var weekday = 3;
switch (weekday) {
case 1: //if(weekday == 1)
console.log('星期一');
break; //:和break类似于 {}
case 2: //else if(weekday == 1)
console.log('星期二');
break;
//省略....
case 6:
console.log('星期六');
break;
case 7:
console.log('星期天');
break;
default: //兜底的else
console.log('什么鬼?');
break;
}
注意:
case weekday > 1: //不会报错,但你猜是什么运行效果?
case 6 || 7: //同样不会报错,但更加的古怪……如果你真想6和7都输出为“周末”,可以:
case 6:
case 7:
console.log('周末');
break;
for (var pn in student) {
console.log(pn); //想一想如何取到每个元素的值
}
for (var n in numbers) {
console.log(numbers[n]);
}
但是,这一自作聪明的“一心两用”却给我们带来一个意外惊喜:
numbers.name = 'Hello'; //数组仍然是一个对象,对象就可以这样动态添加属性
然后再迭代(循环)numbers,结果是什么? Hello也被输出来了,^_^
所以,ES6又引入了 for...of... 循环,用于数组时就只会取到数组元素,而不会获得数组属性。
@想一想@:JavaScript是把数组中的元素当成了属性么?如何证明呢?
for (var i of students) {
console.log(i[0]);
}
复习:for... of(区别于for...in):只取集合元素,不取属性
使用forEach()回调函数:
arr.forEach(function (value, index, array) {
console.log('value:' + value);
console.log('index:' + index);
console.log('array[index] === value:' + (array[index] === value));//注意运算优先级
})
都已经有了for循环了,为什么还要这些玩意呢?因为ES推出了一些没有下标的新的集合:
如何存储某次考试源栈同学们的成绩?要求名字和成绩一一对应。
复习:数组实现
但这样太麻烦了,其实这是一种典型的“键值对”数据结构:
var scores = new Map([['小程', 95], ['老赵', 75], ['两开花', 85]]);
scores.get('两开花');
或者:
var m = new Map(); // 空Map
m.set('小鱼', 67); // 添加新的key-value
其他操作:
scores.has('小鱼'); // 是否存在key '小鱼': true
scores.get('小鱼'); // 67
scores.delete('小鱼'); // 删除key '小鱼'
scores.size; //集合元素数量
演示:取出Map中的每一个元素
@猜一猜@:如果key值出现重复?
var scores = new Map([['小程', 95], ['小程', 75], ['两开花', 85]]);
@想一想@:这样好不好?
不能重复,重复的值会被自动过滤掉
var s = new Set([1, 2, 3, 3, '3']);
也可以先new一个空的Set
Set对象同样无法通过下标取值,而且也没有“键值”,所以只能遍历:
演示:
var [name, age, female] = ['飞哥', 38, true];
if (female) {
alert(`${age}岁的${name}真汉子`);
}
数组新方法
var arr = [2, -1, '33', true, '78.5', null, 5, 2, '', 7, -9, undefined];
find/findIndex:
arr.findIndex(function (v) {
return !isNaN(v) && (v + '').indexOf('.') > -1;
})
filter:过滤掉不符合条件的元素
arr.filter(function (v, index) {
return index % 2 === 0 && v > 0;
});
every:检查数组里每个元素是否符合规则
arr.every(function (v, index, arr) {
return !isNaN(v);
})
arr.map(function (v) {
return v + 10;
})
注意:都是将function作为参数传递!
var sname = '刘伟';
var greet = `"源栈"欢迎'您',${sname}"`;
常用条件(类CSS):
a[href]{}
还可以使用:加入混淆代码,并演示:
<div id="ad" class="dazzle">
加入<a href="">源栈</a>学编程: <strong yz-slogan=""><span>大</span>神<span>小</span>班</strong>
</div>
多快好省!前端后端,线上线下,名师精讲
更多了解 加: