以三元组的形式访问数组中对象的属性

时间:2015-04-24 12:32:03

标签: javascript arrays ternary-operator

我有一个有趣的情况,并想知道是否有人知道为什么。 我在我的代码中有这个陈述

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);

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

1 个答案:

答案 0 :(得分: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