我遇到了一个有趣的情况,想知道是否有人知道原因。 我的代码中有这样的语句
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);
有谁知道为什么当我尝试直接在三元中访问它时它会是未定义的?
最佳答案
那么,你的第一个表达式相当于
(typeof k.rewards !== 'undefined' ? k.rewards[0] : k).value
而你的第二个相当于
(typeof k.rewards !== 'undefined' ? k.rewards : k.value)[0].value
我希望你现在就能看到差异......
This would throw an error of value being undefined within the array (on the truthy side of the ternary).
不完全是。当 k.rewards[0]
为 undefined
时,您的第一个确实会抛出异常,并且您仍然尝试访问其 .value
属性。如果 k.rewards[0]
存在,但没有 .value
属性,则不会抛出异常,而只是产生 undefined
。您可能还想根据您的情况测试 k.rewards.length > 0
:
(k.rewards && k.rewards.length ? k.rewards[0] : k).value
关于javascript - 访问三元数组中对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29847647/