JavaScript#JavaScript#数组方法#异步
JavaScript 入门第九天:数组遍历、日期与定时器
从回调函数出发学习 forEach、map、filter、reduce,并用 Date 和定时器完成时间相关练习。
3 分钟阅读
今天把手写 for 循环延伸到数组遍历方法,并完成日期和网页时钟相关练习。共同核心是:把“每一项怎么处理”交给一个回调函数。
回调函数描述每一项的处理方式
forEach() 适合执行副作用,例如输出或更新 DOM;它不创建新的结果数组:
tasks.forEach((task, index) => {
console.log(index, task)
})
map() 把每项映射为一个新值,filter() 保留符合条件的项,reduce() 把一组数据累积为一个结果:
const prices = [10, 20, 30]
const labels = prices.map((price) => `¥${price}`)
const expensive = prices.filter((price) => price >= 20)
const total = prices.reduce((sum, price) => sum + price, 0)
不要用 map() 只做 console.log(),也不要在 forEach() 里期待它返回新数组。选择方法要和最终结果匹配。
every 与 some 表达整体判断
当问题是“是否全部满足”或“是否至少一个满足”时,every() 和 some() 比手写标志位更直接:
const allPassed = scores.every((score) => score >= 60)
const hasFailed = scores.some((score) => score < 60)
它们会在结果确定后短路,不必无意义地检查剩余元素。
日期对象和定时器
new Date() 表示当前时刻,可通过 getFullYear()、getMonth()、getDate()、getHours() 等方法读取组成部分。月份从 0 开始,显示给用户时通常要加 1。
const now = new Date()
const text = `${now.getHours()}:${String(now.getMinutes()).padStart(2, '0')}`
setTimeout() 在指定时间后执行一次,setInterval() 周期执行并返回定时器 ID。离开页面或不再需要时要用 clearTimeout()、clearInterval() 清理,避免计时器继续改动已经不存在的页面。
网页时钟的练习把这些知识接在一起:写一个读取当前时间的函数,先执行一次立即显示,再用定时器每秒刷新。把重复部分收进函数,是今天比“能动起来”更重要的收获。