JavaScript循环练习报错求助:Task2与Task3未通过问题排查
问题排查:for...of/for...in循环输出格式错误
练习要求回顾
- 使用
for...of循环遍历数组与对象自有属性 - 使用
for...in循环遍历对象及其原型属性
当前问题
logDairy函数已完成并通过测试,无需修改birdCan函数:使用for...of遍历bird对象属性时,输出为canFly:truehasFeathers:true,与预期canFly: truehasFeathers: true不符(冒号后缺少空格)animalCan函数:使用for...in遍历bird及其原型animal的属性时,输出为canJumpcanFlyhasFeatherscanJump,与预期canFly: truehasFeathers: truecanJump: true不符(仅输出属性名,未输出键值对,且存在重复属性名)
错误原因与修正方案
1. birdCan函数错误修正
错误原因:拼接输出字符串时,冒号与属性值之间未添加空格,导致格式不符合预期。
假设原代码类似:
function birdCan(bird) { let output = ''; for (const key of Object.keys(bird)) { // 缺少空格,格式为`key:value`而非要求的`key: value` output += `${key}:${bird[key]}`; } console.log(output); }
修正代码:
function birdCan(bird) { let output = ''; for (const key of Object.keys(bird)) { // 冒号后添加空格,匹配预期格式 output += `${key}: ${bird[key]}`; } console.log(output); }
2. animalCan函数错误修正
错误原因:仅拼接了属性名,未按要求拼接键值对格式;同时未处理属性值输出,导致仅显示属性名。
假设原代码类似:
function animalCan(bird) { let output = ''; for (const key in bird) { // 仅添加属性名,未生成键值对格式 output += key; } console.log(output); }
修正代码:
function animalCan(bird) { let output = ''; for (const key in bird) { // 按要求拼接键值对格式 output += `${key}: ${bird[key]}`; } console.log(output); }
补充说明:如果bird实例自身与原型animal存在同名属性(如示例中的canJump),若需仅保留实例自有属性,可添加过滤判断:
for (const key in bird) { if (bird.hasOwnProperty(key)) { output += `${key}: ${bird[key]}`; } }
但根据练习要求需遍历对象及其原型属性,因此直接拼接键值对即可解决格式问题。
内容的提问来源于stack exchange,提问作者Sagar Pande
相关产品推荐
相关产品推荐

