Ich verwende eine solche Destrukturierung:
const { item } = content
console.log(item)
Aber wie soll ich damit umgehen content === undefined
- was wird einen Fehler auslösen?
Der "alte" Weg würde so aussehen:
const item = content && content.item
Also, wenn content
undefiniert ist -> item
wird auch undefiniert sein.
Kann ich mit Destrukturierung etwas Ähnliches tun?
javascript
ecmascript-6
user3142695
quelle
quelle
Antworten:
Sie können die Kurzschlussauswertung verwenden , um einen Standardwert
content
anzugeben, wenn es sich normalerweiseundefined
odernull
in diesem Fall um einen falschen Wert handelt.const content = undefined const { item } = content || {} console.log(item) // undefined
Eine weniger idiomatische Methode ( siehe diesen Kommentar ) besteht darin, den Inhalt vor der Zerstörung in ein Objekt zu verteilen, da
null
undundefineds
Werte ignoriert werden .const content = undefined const { item } = { ...content } console.log(item) // undefined
Wenn Sie Funktionsparameter destrukturieren, können Sie einen Standardwert angeben (
= {}
im Beispiel).Hinweis: Der Standardwert wird nur angewendet, wenn der destrukturierte Parameter lautet. Dies
undefined
bedeutet, dass Destrukturierungswertenull
einen Fehler auslösen .const getItem = ({ item } = {}) => item console.log(getItem({ item: "thing" })) // "thing" console.log(getItem()) // undefined try { getItem(null) } catch(e) { console.log(e.message) // Error - Cannot destructure property `item` of 'undefined' or 'null'. }
Oder legen Sie einen Standardwert für die
item
Eigenschaft fest, wenn das Eingabeobjekt die Eigenschaft nicht enthältconst getItem = ({ item = "default" } = {}) => item console.log(getItem({ item: "thing" })) // "thing" console.log(getItem({ foo: "bar" })) // "default"
quelle
unidiomatic
Ihrer Meinung nach?for of
weil es besser liest und besser funktioniert als.forEach
, aber sie haben die gleiche Geschwindigkeit in heutigen Motoren ). Es fühlt sich unidiomatisch an, weil es in meinen Augen nur… komisch aussieht.{ ...content }
ist als Redewendung für "eine flache Kopie voncontent
" erstellen , nicht für "... oder ein leeres Objekt, wenn es undefiniert ist" bekannt.const { item } = Object(content)
quelle
Die akzeptierte Antwort funktioniert nicht für wirklich undefinierte Werte, die nicht von festgelegt wurden
const content = undefined
. In solchen Fällen funktioniert dies:const { item } = (typeof content !== 'undefined' && content) || {} console.log(item)
quelle
undefined
. Das Testen des obigen Codes in einer Entwicklungskonsole, diecontent
nicht deklariert ist oder sich im Gültigkeitsbereich befindet, funktioniert, aber das Ersetzen der Zuweisung durchcontent || {}
eineUncaught ReferenceError: content is not defined
Ausnahme wird ausgelöst .