You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何对象属性作为参数索引时报错?用三元运算符则正常

问题原因及解决办法
  • 先看能正常运行的三元表达式:item?.unit ? item.unit:''
    这里用了可选链操作符?.,如果item是null或者undefined,item?.unit会直接返回undefined,三元表达式就会返回空字符串,全程不会触发访问不存在属性的错误。就算item存在但unit属性不存在,同样会走返回空字符串的分支,不会报错。

  • 再看报错的语句:point.sum = point.sum * conversionFactorArr[item.unit].conversionFactor;
    这里有两个明确的报错诱因:

    1. 如果item是null/undefined,直接访问item.unit会抛出Cannot read properties of null/undefined的错误——你没给item加可选链做安全保护。
    2. 就算item存在,item.unit的值可能是undefined、或者不是conversionFactorArr里的有效键,导致conversionFactorArr[item.unit]返回undefined,接着访问.conversionFactor就会抛出Cannot read properties of undefined的错误。
  • 对应的解决办法:

    1. 用可选链+默认值做安全处理,避免报错的同时保证乘法逻辑正常:
      const factor = item?.unit ? conversionFactorArr[item.unit]?.conversionFactor || 1 : 1;
      point.sum = point.sum * factor;
      
    2. 或者用完整的条件判断做前置检查:
      if (item && item.unit && conversionFactorArr[item.unit]?.conversionFactor) {
        point.sum = point.sum * conversionFactorArr[item.unit].conversionFactor;
      }
      

内容的提问来源于stack exchange,提问作者cSharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:14:56