Das heißt, Sie können diesen Operator verwenden, um auf Eigenschaften eines Objekts zuzugreifen, wo das Objekt selbst sein kann null oder undefined. Jetzt möchte ich im Grunde dasselbe tun, aber die Eigenschaftsnamen sind dynamisch:
const value = a?[b]?.c;
Allerdings bekomme ich dort einen Syntaxfehler:
Fehler TS1005: ‘:’ erwartet.
Was mache ich hier falsch? Ist das überhaupt möglich?
Das Vorschlag scheint zu implizieren, dass dies nicht möglich ist (aber vielleicht verstehe ich die Syntaxbeispiele falsch).
Beim Zugriff auf eine Eigenschaft mit Klammernotation und optionaler Verkettung müssen Sie zusätzlich zu den Klammern einen Punkt verwenden:
const value = a?.[b]?.c;
Dies ist die Syntax, die von der übernommen wurde TC39-Vorschlagda es sonst für den Parser schwierig ist, herauszufinden, ob dies der Fall ist ? ist Teil eines ternären Ausdrucks oder Teil einer optionalen Verkettung.
So wie ich darüber denke: Das Symbol für optionale Verkettung ist es nicht ?es ist ?.. Wenn Sie eine optionale Verkettung durchführen, verwenden Sie immer beide Zeichen.
Ich würde ersetzen schwer mit unmöglich.
– vol7ron
9. November 2019 um 16:17 Uhr
@vol7ron warum so – ich denke es kann sich freuen :
– EinArrayOfFunctions
9. November 2019 um 20:40 Uhr
Es wäre nicht in der Lage, zu unterscheiden, insbesondere wenn es Fehler gibt.
– vol7ron
9. November 2019 um 20:49 Uhr
@AnArrayOfFunctions Wird nicht passieren. Es gibt bereits einige Stellen in der Sprache, an denen dieses Vorausschauen Probleme lösen würde. Denken Sie nur, wie die Aussage function(){}; oder {a: 1}.a; sind beide ein Syntaxfehler. Außerdem: Verschachtelte Ternäre sind bereits schwer zu analysieren (was bedeutet a?[...b][1]?c:d?.e:f bedeuten). Besser nicht durch Überladen erschweren ?.
– Robert
21. Juli 2020 um 5:10 Uhr
Wow, das ist sehr unintuitiv, da die optionale Verkettungssyntax abzüglich des “optionalen” Teils ungültig ist. Sie können keine Verkettung als ausführen a.[b].cAlso a?.[b]?.c wird nur von denen entdeckt, die auf das Problem stoßen und online suchen. Vielleicht könnte ein Vorschlag gemacht werden, um dies zu ermöglichen a.[b].c Verkettungssyntax?
– Sprengung
4. Juni 2021 um 13:49 Uhr
Der optionale Verkettungsoperator ist ?.
Hier sind einige Beispiele für die Handhabung von Nullable-Eigenschaften und -Funktionen.
Gibt es einen Unterschied im Tun a?.b?.c ?? default vs a?.b?.c || default?
– Nick
29. November 2021 um 10:21 Uhr
|| prüft auf alle falschen Werte, also '', 0 und false wird auf die Standardeinstellung gehen, wohingegen ?? wird nur standardmäßig für null und undefined
Sie verfehlen den Punkt, der Betreiber ist
?.
– zessx
9. November 2019 um 15:51 Uhr
Ja natürlich, vielen Dank 😊
– Golo Roden
9. November 2019 um 15:56 Uhr
Meine Nebenbemerkung: Typescript umfasste eine frühere ES-Spezifikation, daher würde ich die MDN-Dokumentation verlinken developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
– massic80
28. Juni um 22:46 Uhr