Il trucco di convalida {foo = foo} nel destrutturare un pattern sicuro da adottare?
Ho letto questo trucco in una risposta qui , che è possibile convalidare la presenza di foo
proprietà 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
È un comportamento ben definito in JS?
Sì. Si basa sulla zona morta temporale di const
e let
variabili. 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 error
funzione di lancio per rendere chiara l'intenzione.