使用变量动态获取数组元素失败,求正确语法实现
问题:用变量动态获取对象属性值失败
我想通过变量修改数值,从数组里获取对应元素。直接执行lastKickoffTime = m_nfl_schedule_ar.w_5.slice(-1).pop().kickoff能得到预期结果,但试了好几种变量写法都不行,具体尝试的代码如下:
可行写法
// 可行写法 lastKickoffTime = m_nfl_schedule_ar.w_5.slice(-1).pop().kickoff
无效尝试写法
weekNum = "5"; lastKickoffTime = m_nfl_schedule_ar.['w_'+weekNum].slice(-1).pop().kickoff lastKickoffTime = m_nfl_schedule_ar.w_[weekNum].slice(-1).pop().kickoff lastKickoffTime = m_nfl_schedule_ar.w_weekNum.slice(-1).pop().kickoff lastKickoffTime = m_nfl_schedule_ar.w_+weekNum+.slice(-1).pop().kickoff lastKickoffTime = m_nfl_schedule_ar.w_'+weekNum+'.slice(-1).pop().kickoff
正确解法
要动态拼接对象的属性名,必须使用方括号语法,且要保证拼接后的是完整的属性名。以下两种写法都有效:
模板字符串写法(ES6+)
const weekNum = "5"; lastKickoffTime = m_nfl_schedule_ar[`w_${weekNum}`].slice(-1).pop().kickoff;
字符串拼接写法
const weekNum = "5"; lastKickoffTime = m_nfl_schedule_ar['w_' + weekNum].slice(-1).pop().kickoff;
无效写法的问题说明
- 第一种:方括号前多了一个点,正确写法应该是
m_nfl_schedule_ar['w_'+weekNum],不需要在方括号前加. - 第二种:
w_[weekNum]的写法错误,JavaScript不支持将属性名拆分为前缀加变量的形式,必须把完整的属性名放在方括号内 - 第三种:
w_weekNum会被当作字面量属性名,不会将weekNum解析为变量 - 第四种:语法错误,
w_+weekNum+.slice完全不符合JavaScript语法规范 - 第五种:引号位置错误,错误地将属性名和方法调用都包含在引号中,导致语法失效
内容的提问来源于stack exchange,提问作者Michael Shackelford
相关产品推荐
相关产品推荐

