Come verificare se una variabile è un oggetto Moment.js?


92

La mia applicazione ha un modulo HTML con alcuni input popolati dal back-end e altri input inseriti dall'utente (in un timeinput). Una onChangefunzione esegue ogni input quando l'utente modifica un valore.

Gli input popolati dal backend vengono convertiti in momentoggetti, le date inserite dall'utente sono semplici stringhe. Ciò significa che la onChangefunzione incontra alcuni momentoggetti e alcune stringhe. Ho bisogno di sapere quali input sono momentoggetti e quali no.

Qual è il metodo consigliato per verificare se una variabile è un momentoggetto?

Ho notato che gli momentoggetti hanno una _isAMomentObjectproprietà ma mi chiedo se ci sia un altro modo per verificare se una variabile è un momentoggetto.

Un'altra opzione che ho provato è chiamare momentla variabile a prescindere. Questo converte le stringvariabili in momentoggetti e non sembra influenzare gli momentoggetti esistenti .

Risposte:


95

Moment ha un isMomentmetodo proprio per questo scopo. Non è particolarmente facile da trovare nei documenti a meno che tu non sappia cosa cercare.

Prima controlla instanceofe poi fallisce che (ad esempio in certe situazioni di sottoclassi o cross-realm) testerà la _isAMomentObjectproprietà.


cosa succede se non è fortemente digitato? moment.isMoment (input);
Don Thomas Boyle

3
@DonThomasBoyle questo è JavaScript: non c'è una digitazione forte. "Forte" è un termine ambiguo per indicare la digitazione, ma per quasi tutte le possibili definizioni (a parte forse la sicurezza della memoria) i tipi JS sono deboli. L'unico modo in cui puoi avere quell'esplosione è se inputè nullo undefined, letteralmente qualsiasi oggetto JS non nullo o anche un valore primitivo restituirà solo un booleano.
Jared Smith

34

Puoi controllare se è un instanceofmomento:

moment() instanceof moment; // true

6
Solo se l'istanza e il momento stesso sono nella stessa finestra.
JAAulde

1
Questo è sempre vero, perché moment () creerebbe sempre un oggetto moment. Volevi invece dire "obj instanceof moment;" ?
NoBrainer

3

moment () istanza di momento;

sarà sempre vero, perché se lo hai

  • momento (non definito) istanza di momento
  • moment ("ciao") istanza di momento

crei sempre un oggetto momento. Quindi l'unico modo è controllare in questo modo

  • moment (proprietà) .isValid ()
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.