SfondoPosso pre-dichiarare le variabili per l'assegnazione destrutturante di oggetti?
Quando ho provato la destrutturazione incarico con gli array sono stato in grado di controllare la validità di dichiarare le mie variabili:
let a, b, c;
let arr = [1, 2, 3, 4, 5];
[a, b, c] = arr;
console.log(a) // logs 1
console.log(b) // logs 2
console.log(c) // logs 3
Questo ha attraversato il compilatore Babel bene.
Tuttavia quando ho cercato di fare lo stesso con gli oggetti ho ottenuto un errore
let a, b, c
let obj = {cat: 'meow', dog: 'woof', mouse: 'squeak'};
{cat: a, dog: b, mouse: c} = obj;
console.log(a) // I want this to log 'meow'
console.log(b) // I want this to log 'woof'
console.log(c) // I want this to log 'squeak'
Domanda
È questa un'ES6 o Babel vezzo/problema? Se è intenzionale per ES6, perché la differenza dal modo in cui vengono trattati gli array?
Nota
ho capito che la sostituzione var
con let
significa non ho tenuto a pre-dichiarare le mie variabili e che avere la let
linea è valida (e, credo, di solito preferivamo). Mi piacerebbe sapere la differenza tra le implementazioni piuttosto che una risposta "non fatelo affatto".
Cosa stai ancora cercando di realizzare con questo: '{ cat: a, cane: b, mouse: c} = obj; '? Hai un oggetto completamente formato in 'obj'. Se vuoi copiarlo su un altro oggetto, usi 'Object.assign()'. – jfriend00
@ jfriend00 Sto imparando come funziona l'assegnazione distruttiva: gli esempi sono puramente a scopo di apprendimento. Ma lo scopo generale sarebbe quello di assegnare valori a 'a',' b', 'c' piuttosto che creare un nuovo oggetto. La distruzione dovrebbe * abbattere * piuttosto che copiare. –
Quindi, puoi semplicemente usare una normale dichiarazione: 'lascia myObj = {cat: a, dog: b, mouse: c};'. Non hai bisogno di destrutturare per quello. Se si desidera assegnare le proprietà nell'oggetto già esistente dai valori di 'a',' b' e 'c', è sufficiente assegnarli manualmente' obj.cat = a; '. – jfriend00