Es gibt zwei Möglichkeiten, diesen Fehler zu erzeugen. Die erste Möglichkeit ist, wenn der Konstruktor-Ausdruck eine optionale Verkettungsausdruck ist, wie hier:
new Intl?.DateTimeFormat();
Number?.[parseMethod]`Hello, world!`;
Die zweite Möglichkeit ist, wenn ?.
zwischen dem Konstruktor und der Argumentliste auftritt, wie hier:
new Intl.DateTimeFormat?.();
Ein optionales new
ist speziell verboten, weil seine Syntax kompliziert ist (new
mit und ohne Argumente) und das Ergebnis unklar ist (es wäre der einzige Fall, in dem new
nicht zu einem Objektwert ausgewertet wird). Sie müssen die optionale Verkettung in ihre grundlegende Bedingung übersetzen (sehen Sie sich die optionale Verkettung für weitere Informationen an).
const result =
Intl.DateTimeFormat === null || Intl.DateTimeFormat === undefined
? undefined
: new Intl.DateTimeFormat();
Denken Sie daran, dass die optionale Verkettung nur innerhalb einer geklammerten Einheit kurzschlieÃt. Wenn Sie Ihren Konstruktor-Ausdruck klammern, wird die optionale Verkettung keinen Fehler verursachen, da jetzt der Konstruktor nicht mehr kurzschlieÃt und das Ergebnis klar ist (der Konstruktor wird undefined
produzieren und dann die new
-Ausdruck verursachen, um einen Fehler zu werfen).
new (Intl?.DateTimeFormat)(); // Throws if Intl?.DateTimeFormat is undefined
Dies ist jedoch sowieso etwas unsinnig, da die optionale Verkettung Fehler innerhalb der Eigenschafts-Zugriffs-Kette verhindert, dann aber garantiert einen Fehler bei der Verwendung von new
erzeugt. Sie möchten wahrscheinlich immer noch eine Bedingungsprüfung verwenden.
Beachten Sie, dass die optionale Verkettung nur als Konstruktor-Ausdruck verboten ist. Sie können die optionale Verkettung in der Argumentliste verwenden oder die optionale Verkettung auf den gesamten new
-Ausdruck anwenden.
new Intl.DateTimeFormat(navigator?.languages);
new Intl.DateTimeFormat().resolvedOptions?.();
Beachten Sie, dass es nicht nötig ist, ?.
auf dem new
-Ausdruck selbst zu verwenden: new a()?.b
, weil new
garantiert einen nicht-nullish Objektwert erzeugt.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4