Suponiendo que tengo un objeto como este
foo = { a: 1, b: 2, c: 3 };yo lo desestructuraria asi
const {a, b, c} = foo; Sin embargo, ¿qué ocurre si las claves a , b y c no existen?
foo = null;Esto no funcionará entonces
const {a, b, c} = foo;tendria que hacer algo como
let a, b, c; if(foo) { a = foo.a; b = foo.b; c = foo.c; };¿Hay alguna manera de hacer esto en una línea? Algo como
const {a, b, c} = foo ? foo : null; // this is not workingnull no es un objeto. (evaluando '_ref2.a')
Cuando foo no es un objeto, tendrá que darle un objeto para que pueda ocurrir la desestructuración. Así que configúralo en un objeto vacío usando un 'o'. Ahora, si foo está definido, usará foo , si no está definido, usará el objeto predeterminado.
const foo = undefined; const { a, b, c } = foo || {}; console.log(a, b, c);Si desea valores predeterminados, configúrelos en el objeto.
const foo = undefined; const { a, b, c } = foo || {a : 'a', b: 'b', c: 'c' }; console.log(a, b, c);Si desea valores predeterminados si el objeto no los proporciona todos, puede establecer valores en la desestructuración.
const foo = { a: 1}; const { a = "a", b = "b", c = "c" } = foo || {}; console.log(a, b, c);¿Qué pasa con la desestructuración de los parámetros predeterminados? Si foo pudiera ser indefinido set = foo || {} en la desestructuración para evitar excepciones
let foo = {}; const {a = null, b = null, c = null} = foo; console.log('a:', a); console.log('b:', b); console.log('c:', c);Funcionará como cabría esperar, las variables a b y c se crearán con el valor de undefined . esta es la alternativa cuando también se intenta acceder a una propiedad que no existe en un objeto determinado.
const foo = {}; console.log(foo.a); // undefined const {a, b, c} = foo; console.log(a); // undefined console.log(b); // undefined console.log(d); // Uncaught ReferenceError: d is not defined