Безопасная деструктуризация с использованием нулевого объединения или дополнительного связывания

В настоящее время я использую следующий код для деструктуризации:

const myObj1 = {name: 'Abc'}
const {name} = myObj1
console.log(name)
const myObj2 = null
const {name2} = myObj2  // this will give error

Теперь, когда у нас есть необязательная цепочка, я могу сделать это:

const myObj = {name: 'Abc'}
const {name} = myObj
console.log(name) // 'Abc'
const myObj2 = null
const name2 = myObj2?.myObj2
console.log(name2) // undefined

Есть ли лучший способ или безопасный метод деструктуризации с использованием нулевого объединения или дополнительного связывания?

3 ответа

Решение

const name2 = myObj2?.myObj2 это не деструктуризация.

myObj2?.myObj2 вернется undefined который вы назначаете name2.

Вы можете просто сделать

const myObj2 = null;
const { name2 } = { ...myObj2 };
console.log(name2); // undefined

Если вы хотите использовать нулевой оператор объединения, вы должны использовать его, как показано ниже:

const myObj2 = null
const {name2} =  myObj2 ?? {};
console.log(name2) // undefined

нулевой оператор объединения вернет операнд с правой стороны, если myObj2 имеет значение null или undefined, иначе он вернет операнд с левой стороны, который в вашем случае myObj2.

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

const myObj = {name: 'Abc', email: "test"}
const {name,email} = myObj
console.log(name, email) // 'Abc' "test"
const myObj1 = null
const {name1,email1} = myObj1 || {} // or myObj1 ?? {}
console.log(name1,email1) // undefined undefined

Ты можешь попробовать ||

const myObj2 = null;
const {name2, name3} = myObj2 || {}
console.log(name2, name3);

const myObj3 = {name4: "name4"};
const {name4, name5} = myObj3 || {}
console.log(name4, name5);

Надеюсь на эту помощь.

Другие вопросы по тегам