Javascript 在三元数组中访问数组中对象的属性
我有一个有趣的情况,不知道是否有人知道为什么。 我的代码中有这个语句Javascript 在三元数组中访问数组中对象的属性,javascript,arrays,ternary-operator,Javascript,Arrays,Ternary Operator,我有一个有趣的情况,不知道是否有人知道为什么。 我的代码中有这个语句 var score = (typeof k.rewards !== 'undefined') ? k.rewards[0].value : k.value; 这将在数组中抛出一个未定义值的错误(在三元数组的truthy端)。但是,我知道值在那里,这将很好地打印出来 var score = (typeof k.rewards !== 'undefined') ? k.rewards : k.value; Console.log
var score = (typeof k.rewards !== 'undefined') ? k.rewards[0].value : k.value;
这将在数组中抛出一个未定义值的错误(在三元数组的truthy端)。但是,我知道值在那里,这将很好地打印出来
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
我希望你现在能看到不同
这将在数组中抛出一个未定义值的错误(在三元数组的truthy端)
不完全是。当k.rewards[0]
为未定义时,您的第一个确实会抛出,但您仍尝试访问其.value
属性。如果k.rewards[0]
存在,但没有.value
属性,它不会抛出,只会产生未定义的。您可能需要在您的条件下测试k.rewards.length>0
:
(k.rewards && k.rewards.length ? k.rewards[0] : k).value
您可以添加生成数组的代码吗?您可以显示奖励类型和结构吗?不应该是这样,请使用以下表达式:var score=k.rewards&&k.rewards.length?k、 奖励[0]。价值:k.价值代码>确定,但它们都有值。上述声明应该有效。我正在获取远程数据,结构可以是k.rewards[0].value或k.value。奖赏的长度可能是问题所在