这是我的确切代码:
<Text style={styles.priceText} numberOfLines={2}>
{'$ '+item.right.detail ? item.right.detail.price: ''}{'\n'}{'\n'}
</Text>
因此,有时可能item.right.detail为null或未定义。此检查无效。我得到一个错误undefined不是一个对象(评估item.right.detail)
我需要一种能够从对象元素构造数据字符串的方法,其中一些子对象或值可以为null。显然我想这样做而不会崩溃!
我是否必须做一些疯狂的事情:
private getPrice(item){
var retVal = '$';
if (typeof item !== 'undefined' ) && (item)) {
if (typeof item.right !== 'undefined' ) && (item.right)) {
if (typeof item.right.detail !== 'undefined' ) && (item.right.detail)) {
if (typeof item.right.detail.price !== 'undefined' ) && (item.right.detail.price)) {
retVal = retVal+item.right.detail.price;
}
}
}
}
return retVal;
}
答案 0 :(得分:0)
尝试使用!!运营商。对于空值,!!返回false,因此,您的代码可能是这样的:
<Text style={styles.priceText} numberOfLines={2}>
{'$ '+ (!item || !item.right || !item.right.detail || !item.right.detail.price) ? '' : item.right.detail.price}{'\n'}{'\n'}
</Text>
答案 1 :(得分:0)
我认为问题最好通过lodash库来解决。
见https://lodash.com/docs#get _.get(object,path,[defaultValue])
获取object对象的值。如果未定义已解析的值,则返回defaultValue。
_。get(item,“item.right.detail.price”,“Not available”)//这应该有用。