如何在未定义的对象上使用三元运算符
How to use ternary operator on undefined objects
我正在尝试使用三元运算符有条件地设置变量,但出现以下错误:
Cannot set property 'po_no' of undefined
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";
我想要一个 "clean" 方法来设置这些变量,因为在实际项目中有很多。
有条件地设置 po_no
的好方法是什么?
当 cart.length > 0
的计算结果为 false
时,为什么三元运算符不跳过 cart[0]
?
如果 cart.length 的计算结果为 0,则一定不会出现错误 "Cannot set property 'po_no' of undefined",但是为了安全起见,请尝试以下代码:
let po_no = (cart.length > 0 && cart[0]['order']) ? cart[0]['order']['po_no'] : "P.O. Number";
在这种情况下,对 po_no 的安全访问是,
let po_no = (cart && cart[0] && cart[0].order && cart[0].order.po_no)
|| "P.O. Number";
注意:此访问也将忽略未定义或虚假的 po_no
我试图分配给与订单键同名的 undefined
对象,因此无法设置为 this.order.po_no
。
正确实例化 this.order
后问题就消失了。
我正在尝试使用三元运算符有条件地设置变量,但出现以下错误:
Cannot set property 'po_no' of undefined
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";
我想要一个 "clean" 方法来设置这些变量,因为在实际项目中有很多。
有条件地设置 po_no
的好方法是什么?
当 cart.length > 0
的计算结果为 false
时,为什么三元运算符不跳过 cart[0]
?
如果 cart.length 的计算结果为 0,则一定不会出现错误 "Cannot set property 'po_no' of undefined",但是为了安全起见,请尝试以下代码:
let po_no = (cart.length > 0 && cart[0]['order']) ? cart[0]['order']['po_no'] : "P.O. Number";
在这种情况下,对 po_no 的安全访问是,
let po_no = (cart && cart[0] && cart[0].order && cart[0].order.po_no)
|| "P.O. Number";
注意:此访问也将忽略未定义或虚假的 po_no
我试图分配给与订单键同名的 undefined
对象,因此无法设置为 this.order.po_no
。
正确实例化 this.order
后问题就消失了。