Как использовать троичный оператор на неопределенных объектах - PullRequest
1 голос
/ 19 июня 2019

Я пытаюсь условно установить переменную с помощью троичного оператора, но получаю следующую ошибку:

Невозможно установить свойство '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 ]

1 голос
/ 19 июня 2019

В этом случае безопасный доступ к po_no будет,

let po_no = (cart && cart[0] && cart[0].order && cart[0].order.po_no) 
            || "P.O. Number";

Примечание. Этот доступ также будет игнорировать неопределенное или ложное значение po_no

1 голос
/ 19 июня 2019

Если значение cart.length равно 0, не должно быть ошибки «Невозможно установить свойство 'po_no' из неопределенного», однако для безопасности попробуйте следующий код:

let po_no = (cart.length > 0 && cart[0]['order']) ? cart[0]['order']['po_no'] : "P.O. Number";
0 голосов
/ 19 июня 2019

Я пытался назначить объект undefined с тем же именем, что и ключ заказа, поэтому не смог установить значение this.order.po_no.

После правильного создания экземпляра this.order проблема исчезла.

...