我有一个有趣的情况,并想知道是否有人知道为什么。 我在我的代码中有这个陈述
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);
当我尝试直接在三元组中访问它时,有谁知道为什么它会被定义?
答案 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