javascript - 访问三元数组中对象的属性

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

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

最佳答案

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

(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/

相关文章:

javascript - Angular : Updating controller scope variable through a factory variable

javascript - 插值 nvd3 时 LineWithFocusChart 溢出

c - 如何将此结构数组传递给函数,我的代码有什么问题?

javascript - JSLint 对三元运算符发出警告

javascript - 与 apollo-server 的 Websocket 连接返回乱码的 connectionParams

arrays - 如何使用 swift 从解析服务器上的类中检索 objectID

C++:类内的静态数组大小未知

c - 这个返回语句是什么意思

javascript - ReactJS:更改状态后如何立即更新组件