JavaScript中使用变量访问对象属性的实现问题
动态访问对象属性的正确实现方式
你的代码问题出在动态属性访问的语法错误以及字符串拼接逻辑错误,下面是修正后的写法和关键说明:
核心错误点
- 不能用
.语法访问动态属性:_res.merchant_这种写法只会访问名为merchant_的固定属性,而非你想要的merchant_1/merchant_2。 - 字符串拼接逻辑错误:
_res.merchant_ +%j`` 完全不符合JS模板字符串语法,无法生成正确的属性名。 - 终止循环的方式不规范:直接设置
j=9不如用break清晰。
修正后的代码
for (let j = 0; j < 9; j++) { // 拼接出正确的属性名:merchant_1、merchant_2... const propName = `merchant_${j + 1}`; // 检查属性是否存在且不为null/undefined if (_res[propName] != null) { // 用方括号语法获取动态属性值 const merchantValue = _res[propName]; const arbitrageVal = parseFloat(p_amz - price).toFixed(2); setRowsSub((prevRows) => [ ...prevRows, createData(merchantValue, availability, price, arbitrageVal, 'jesus') ]); } else { // 遇到不存在的属性,终止循环 break; } }
关键说明
- 方括号语法访问动态属性:JS中访问对象的动态属性必须用
obj[属性名字符串],这里propName是拼接出来的merchant_1这类字符串,用_res[propName]就能正确获取对应属性的值。 - 模板字符串拼接属性名:用
${}在模板字符串中插入变量,merchant_${j+1}可以生成从1到9的属性名(因为j从0开始)。 - 属性存在性检查:
_res[propName] != null可以同时判断属性值不为null和undefined,确保只处理有效的属性。 - 规范终止循环:用
break直接跳出循环,比修改循环变量更易读且符合JS规范。
内容的提问来源于stack exchange,提问作者Ted's Projects
相关产品推荐
相关产品推荐

