JavaScript for循环异常排查:为何输出全为周一内容及修复方法
问题原因分析
嘿,我来帮你拆解下为啥会出现全是周一输出的问题:
赋值运算符用错啦!
你在if条件里写的=是赋值运算符,不是用来判断相等的比较运算符==或者===。比如if (breakfast[0]='chocolate cake')这行,其实是把'chocolate cake'塞给了breakfast[0],而这个赋值操作的结果是true,所以第一个if条件永远成立,后面的else if根本没机会执行,自然所有循环都只会打印周一的内容。判断逻辑跑偏了
你循环遍历的是数组每个元素,但每次判断的都是固定索引的元素(比如breakfast[0]),不是当前循环到的i对应的元素。而且就算你改成比较运算符,这种逻辑也不严谨——万一哪天你改了数组里的食物,判断条件就失效了,应该根据循环的索引i来对应星期几才对。
修复后的代码方案
方案一:修正原逻辑的问题
把赋值改成比较,同时根据索引i来判断对应的星期:
var breakfast=['chocolate cake','ramen','sweet potato pie','egg custard','spicy tofu','in a restaurant']; for (i=0;i<breakfast.length;i++){ if (i === 0){ // 索引0对应周一 console.log ('On Monday,we eat '+ breakfast[i] +' !'); } else if (i === 1){ // 索引1对应周二 console.log('On Tuesday, we eat ' + breakfast[i] +' !'); }else if(i === 2){ // 索引2对应周三 console.log('On Wednesday, we eat '+ breakfast[i] +'!'); }else if (i === 3){ // 索引3对应周四 console.log('On Thursday, we eat ' + breakfast[i] +'!'); }else if(i === 4){ // 索引4对应周五 console.log('On Friday, we eat '+breakfast[i]+'!') } else{ // 剩下的索引对应周末 console.log('On weekend, we eat '+breakfast[i]+'!') } }
方案二:更优雅的写法(推荐)
把星期和早餐做成对应的数据结构,代码更简洁好维护:
const mealPlan = [ { day: 'Monday', food: 'chocolate cake' }, { day: 'Tuesday', food: 'ramen' }, { day: 'Wednesday', food: 'sweet potato pie' }, { day: 'Thursday', food: 'egg custard' }, { day: 'Friday', food: 'spicy tofu' }, { day: 'weekend', food: 'in a restaurant' } ]; mealPlan.forEach(item => { console.log(`On ${item.day}, we eat ${item.food}!`); });
这种写法把数据和逻辑分开,以后要改星期或者食物,直接修改mealPlan数组就行,不用动判断逻辑,可读性和可维护性都强很多~
内容的提问来源于stack exchange,提问作者Chef
相关产品推荐
相关产品推荐

