JavaScript中如何用用户输入变量替换函数调用与对象访问的硬编码值
问题原因
你的写法存在两个核心错误:
tic.answer是访问tic对象下名为answer的固定属性,不会读取你定义的answer变量的值,自然匹配不到对应属性- 你把
+'PRICE'的拼接逻辑放在了属性访问外侧,相当于先取不存在的tic.answer(返回undefined)再拼接字符串,结果必然不符合预期
解决方案
JS 中要动态根据变量/表达式的值访问对象属性,需要使用方括号语法,方括号内的表达式会先执行计算,再以计算结果作为属性名取值:
let p = 0; call.prices(answer + 'PRICE', (err, tic) => { p = tic[answer + 'PRICE']; });
优化建议
可以提前定义属性名变量,同时增加属性存在性校验,避免异常情况:
let p = 0; const priceKey = answer + 'PRICE'; call.prices(priceKey, (err, tic) => { // 先判断返回对象和对应属性是否存在 if (tic && tic.hasOwnProperty(priceKey)) { p = tic[priceKey]; } else { // 可自定义属性不存在时的默认值或错误处理逻辑 p = 0; } });
内容的提问来源于stack exchange,提问作者lechnerio
相关产品推荐
相关产品推荐

