如何在未定义的对象上使用三元运算符

时间:2019-06-19 13:37:21

标签: javascript ternary-operator

我正在尝试使用三元运算符有条件地设置变量,但出现以下错误:

  

无法设置未定义的属性'po_no'

let cart = JSON.parse(localStorage.getItem('shopping-cart'));

console.log(cart); // Evaluates to []

console.log(cart.length); // Evaluates to 0

this.order.po_no = (cart.length > 0) ? cart[0]['order']['po_no'] : "P.O. Number";

我想要一个“干净”的方法来设置这些变量,因为实际项目中有很多。

有条件设置po_no的好方法是什么?

cart[0]计算为cart.length > 0时,为什么三元运算符不跳过false

3 个答案:

答案 0 :(得分:1)

如果cart.length计算为0,则不得出现错误“无法设置未定义的属性'po_no'”,但是为了安全起见,请尝试以下代码:

let po_no = (cart.length > 0 && cart[0]['order']) ? cart[0]['order']['po_no'] : "P.O. Number";

答案 1 :(得分:1)

在这种情况下,可以安全地访问po_no,

{apple: [0,4], melon:[10,11]}

注意:此访问权限还将忽略未定义或虚假的let po_no = (cart && cart[0] && cart[0].order && cart[0].order.po_no) || "P.O. Number";

答案 2 :(得分:0)

我试图分配给一个与订单密钥同名的undefined对象,所以无法设置为this.order.po_no

正确实例化this.order之后,问题就消失了。