Уничтожение вложенного объекта, имеющего нулевое значение, вызывает "TypeError: невозможно прочитать свойство 'obj2' из null" - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь деструктурировать вложенный объект, имеющий нулевое значение, но это вызывает "TypeError: невозможно прочитать свойство 'obj2' из null".

Я читал об исправлении, но он работает с не вложенными элементами.

Посмотрите на фрагмент кода.

const tmp = { obj: null };

let { obj: { obj2 } = {} } = tmp || {};

Я ожидаю, что объект деструктуры и obj2 будут нулевыми или неопределенными, но это приведет к ошибке: (

Хорошо работает, когда вместо "undefined" вместо "undefined""null", но мне нужен регистр с "null".

Ответы [ 3 ]

1 голос
/ 08 ноября 2019

ES6 значения по умолчанию для деструктуризации работают, только если атрибут undefined. В любом другом случае он получит назначенное значение. Даже ложные значения Javascript.

Способ обойти это заключается в сокращении возможных ложных значений, в данном случае obj, что будет null.

const tmp = { obj: null };

const { obj } = tmp;

const { obj2 = {} } = obj || {};

console.log(obj);
console.log(obj2);

 
0 голосов
/ 10 ноября 2019

Спасибо, ребята @Dez @junvar

Я изменил свой код на что-то вроде:

const tmp = { obj: null };
const obj2 = tmp?.obj?.obj2;
console.log(obj2);
0 голосов
/ 08 ноября 2019

Вы не сможете сделать это с разрушением. Проще говоря, как и параметры функции по умолчанию, значения деструктуризации по умолчанию применяются только в том случае, если значение не определено, а не равно нулю или другим ошибочным значениям.

В качестве альтернативы вы можете сделать:

const tmp = { obj: null };
let obj2 = tmp && tmp.obj && tmp.obj.obj2;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...