Wie teste ich, ob eine Variable ein Moment.js-Objekt ist?

89

Meine Anwendung verfügt über ein HTML-Formular mit einigen Eingaben aus dem Backend und anderen Eingaben, die vom Benutzer (in einer timeEingabe) eingegeben werden. Eine onChangeFunktion wird durch jede Eingabe ausgeführt, wenn der Benutzer einen Wert ändert.

Die vom Backend ausgefüllten Eingaben werden in momentObjekte konvertiert , die vom Benutzer eingegebenen Daten sind lediglich Zeichenfolgen. Dies bedeutet, dass die onChangeFunktion auf einige momentObjekte und einige Zeichenfolgen trifft . Ich muss wissen, welche Eingaben momentObjekte sind und welche nicht.

Was ist die empfohlene Methode zum Testen, ob eine Variable ein momentObjekt ist?

Ich habe festgestellt, dass momentObjekte eine _isAMomentObjectEigenschaft haben, frage mich jedoch, ob es eine andere Möglichkeit gibt, zu testen, ob eine Variable ein momentObjekt ist.

Eine andere Option, die ich versucht habe, ist das Aufrufen momentder Variablen unabhängig davon. Dies konvertiert die stringVariablen in momentObjekte und scheint keine Auswirkungen auf vorhandene momentObjekte zu haben.

Brett DeWoody
quelle

Antworten:

91

Moment hat eine isMomentMethode für genau diesen Zweck. Es ist nicht besonders leicht, in den Dokumenten zu finden, wenn Sie nicht wissen, wonach Sie suchen müssen.

Zuerst wird geprüft, instanceofob die _isAMomentObjectEigenschaft getestet wird , und dann fehlgeschlagen (z. B. in bestimmten Unterklassen- oder bereichsübergreifenden Situationen) .

Jared Smith
quelle
Was ist, wenn es nicht stark getippt ist? moment.isMoment (Eingabe);
Don Thomas Boyle
3
@ DonThomasBoyle Dies ist JavaScript: Es gibt keine starke Eingabe. 'Stark' ist eine Art mehrdeutiger Begriff für die Eingabe, aber nach so ziemlich jeder möglichen Definition (außer vielleicht der Speichersicherheit) sind JS-Typen schwach. Der einzige Weg , dass Sie diese Luft zu sprengen haben können , ist , wenn inputist nulloder undefined, buchstäblich jedes Nicht-Null - JS - Objekt oder sogar primitiver Wert wird nur einen boolean zurück.
Jared Smith
34

Sie können überprüfen, ob es ein instanceofMoment ist:

moment() instanceof moment; // true
Niels Heisterkamp
quelle
6
Nur wenn sich die Instanz und der Moment selbst im selben Fenster befinden.
JAAulde
1
Dies ist immer wahr, da moment () immer ein Momentobjekt erstellen würde. Meinten Sie stattdessen "obj instanceof moment"; ?
NoBrainer
3

moment () Instanz des Moments;

wird immer wahr sein, denn wenn du hast

  • Moment (undefiniert) Instanz des Moments
  • Moment ("Hallo") Instanz des Moments

Sie erstellen immer ein Momentobjekt. Der einzige Weg ist also, dies zu überprüfen

  • Moment (Eigenschaft) .isValid ()
Fabien Sartori
quelle