JSChallenger对象属性存在判断问题:本地输出正常但平台不通过
JSChallenger 判断对象属性存在练习不通过问题解决
你的代码在VS Code里看起来输出正确,但平台不通过的核心问题是返回值类型错误:你返回的是字符串'true'/'false',但题目要求返回布尔值true/false。VS Code的console.log会把字符串和布尔值的打印结果显示得很像,但平台的测试用例是严格校验返回值类型的,字符串和布尔值属于不同类型,自然无法通过。
错误代码分析
你的代码里三元表达式返回的是带引号的字符串:
return (Object.keys(a).includes(b))? 'true' : 'false';
即便Object.keys(a).includes(b)本身返回的是布尔值,你却把它转换成了字符串,这就违反了题目的返回值要求。
修正方案1:直接返回布尔值
既然includes方法本身就返回布尔值,完全不需要三元表达式,直接返回结果即可:
function myFunction(a, b) { return Object.keys(a).includes(b); }
修正方案2:使用更合适的in操作符
判断对象属性是否存在,JavaScript有更直接、高效的方法——in操作符,它专门用于检查属性是否存在于对象(包括原型链),完美适配题目中属性值为undefined的场景:
function myFunction(a, b) { return b in a; }
如果题目要求仅检查对象自身的属性(排除原型链上的属性),可以改用hasOwnProperty方法:
function myFunction(a, b) { return a.hasOwnProperty(b); }
测试验证
三个测试用例的验证结果:
myFunction({a:1, b:2, c:3}, 'b')→ 返回true,符合要求myFunction({x:'a', y:'b', z:'c'}, 'a')→ 返回false,符合要求myFunction({x:'a', y:'b', z:undefined}, 'z')→ 返回true,符合要求
内容的提问来源于stack exchange,提问作者MadalinJ
相关产品推荐
相关产品推荐

