可以用来遍历数组,
但是,
最好只用来遍历对象属性。
照理说,变量 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>
多快好省!前端后端,线上线下,名师精讲
更多了解 加: