如何在JavaScript的for..in循环中添加筛选条件,仅输出指定值的属性
代码错误原因说明
你编写的代码存在两个核心问题:
- 语法层面误用了
for...in的结构:for...in语句中in关键字后必须填写要遍历的目标对象,你填写的object.c == 3是布尔运算表达式,运行后会得到布尔值true,而非你要遍历的object对象。 - 筛选逻辑位置错误:属性值的匹配判断需要放在循环体内部,每遍历到一个属性时再校验对应值是否符合要求,不能写在
in关键字的后方。
异常运行原因解释
JS执行for (const property in object.c == 3)时,会先运算object.c ==3得到结果true,再尝试遍历布尔值true。布尔值属于原始类型,JS会自动将其转为对应的布尔包装对象,该对象没有可枚举的自有属性,所以循环体一次都不会执行,自然没有符合预期的输出。
修正后代码
const object = { a: 1, b: 2, c: 3 }; for (const property in object) { // 仅属性值为3时执行打印 if (object[property] === 3) { console.log(`${property}: ${object[property]}`); } }
小提示:如果要避免遍历到对象继承的原型属性,可以在判断里额外加上object.hasOwnProperty(property)的校验
内容的提问来源于stack exchange,提问作者Mihir
相关产品推荐
相关产品推荐

