【问题标题】:Accessing property on object in an array in a ternary访问三元数组中对象的属性
【发布时间】:2015-07-03 01:36:48
【问题描述】:

我遇到了一个有趣的情况,想知道是否有人知道原因。 我的代码中有这个语句

var score = (typeof k.rewards !== 'undefined') ? k.rewards[0].value : k.value;

这将引发数组中未定义值的错误(在三元组的真值一侧)。但是,我知道值就在那里,这样就可以打印出来了。

var score = (typeof k.rewards !== 'undefined') ? k.rewards : k.value;
Console.log(score[0].value);

有谁知道为什么当我尝试直接在三元中访问它时它会未定义?

【问题讨论】:

  • 能否添加生成数组的代码?
  • 能否说明奖励类型和结构?
  • 不应该这样,jsfiddle.net/1wmefa6p
  • 改用这个表达式:var score = k.rewards && k.rewards.length? k.rewards[0].value : k.value;

标签: javascript arrays ternary-operator


【解决方案1】:

嗯,你的第一个表达式相当于

(typeof k.rewards !== 'undefined' ? k.rewards[0] : k).value

而你的第二个相当于

(typeof k.rewards !== 'undefined' ? k.rewards : k.value)[0].value

我希望你现在能看到不同之处……

这将引发数组中未定义值的错误(在三元组的真值一侧)。

不完全是。当k.rewards[0]undefined 时,您的第一个确实会抛出,但您仍然尝试访问它的.value 属性。如果k.rewards[0] 存在,但没有.value 属性,它不会抛出而只是产生undefined。您可能还想在您的情况下测试k.rewards.length > 0

(k.rewards && k.rewards.length ? k.rewards[0] : k).value

【讨论】:

  • 好的,但它们都有价值。上述声明应该有效。我正在获取远程数据,结构可以是 k.rewards[0].value 或 k.value。 reward.length 可能是问题所在
猜你喜欢
  • 2015-08-03
  • 1970-01-01
  • 2018-05-21
  • 2018-11-12
  • 2013-12-02
  • 2020-06-11
  • 1970-01-01
  • 2019-10-15
相关资源
最近更新 更多