Il trucco di convalida {foo = foo} nel destrutturare un pattern sicuro da adottare?

Aug 23 2020

Ho letto questo trucco in una risposta qui , che è possibile convalidare la presenza di fooproprietà come questa:

const {foo = foo} = bar

Si getta Uncaught ReferenceError: Impossibile l'accesso 'pippo' prima dell'inizializzazione quando fooè undefined.

È un comportamento ben definito in JS? Funzionerebbe in modo affidabile per tutte le versioni e gli ambienti JavaScript recenti (browser, nodo) e probabilmente quelli futuri?

Sto cercando di vedere se potrebbe avere senso iniziare a usarlo come una comoda convalida abbreviata se non mi interessa avere un messaggio di errore più specifico. Grazie.

Risposte

2 Bergi Aug 23 2020 at 19:56

È un comportamento ben definito in JS?

Sì. Si basa sulla zona morta temporale di conste letvariabili. Potrebbe non funzionare se questi vengono trasferiti in var.

Sto cercando di vedere se potrebbe avere senso iniziare a usarlo come una comoda convalida abbreviata

No, per favore non farlo. Questo è un codice davvero oscuro e confuso, e ogni linter si lamenterà dell'uso prima della definizione. Anche se non ti interessa un messaggio di errore specifico, usa almeno

const {foo = error()} = bar;

con una errorfunzione di lancio per rendere chiara l'intenzione.