Comment tester si une variable est un objet Moment.js?

92

Mon application a un formulaire HTML avec certaines entrées remplies à partir du backend et d'autres entrées entrées par l'utilisateur (dans une timeentrée). Une onChangefonction parcourt chaque entrée lorsque l'utilisateur modifie une valeur.

Les entrées remplies depuis le backend sont converties en momentobjets, les dates saisies par l'utilisateur sont de simples chaînes. Cela signifie que la onChangefonction rencontre des momentobjets et des chaînes. J'ai besoin de savoir quelles entrées sont des momentobjets et lesquelles ne le sont pas.

Quelle est la méthode recommandée pour tester si une variable est un momentobjet?

J'ai remarqué que les momentobjets ont une _isAMomentObjectpropriété mais je me demande s'il existe un autre moyen de tester si une variable est un momentobjet.

Une autre option que j'ai essayée est d'appeler momentla variable malgré tout. Cela convertit les stringvariables en momentobjets et ne semble pas affecter les momentobjets existants .

Brett DeWoody
la source

Réponses:

95

Moment a une isMomentméthode pour un tel objectif. Ce n'est pas particulièrement facile à trouver dans la documentation à moins que vous ne sachiez quoi rechercher.

Il vérifie d'abord, instanceofpuis en cas d'échec (par exemple dans certaines situations de sous-classification ou inter-domaines), il testera la _isAMomentObjectpropriété.

Jared Smith
la source
et si ce n'est pas fortement typé? moment.isMoment (entrée);
Don Thomas Boyle
3
@DonThomasBoyle c'est JavaScript: il n'y a pas de frappe forte. «Fort» est une sorte de terme ambigu pour le typage, mais à peu près n'importe quelle définition possible (autre que peut-être la sécurité de la mémoire), les types JS sont faibles. La seule façon dont vous pouvez avoir cette explosion est si inputest nullou undefined, littéralement tout objet JS non nul ou même une valeur primitive retournera simplement un booléen.
Jared Smith
34

Vous pouvez vérifier s'il s'agit d'un instanceofmoment:

moment() instanceof moment; // true
Niels Heisterkamp
la source
6
Seulement si l'instance et le moment sont dans la même fenêtre.
JAAulde
1
C'est toujours vrai, car moment () créerait toujours un objet moment. Vouliez-vous plutôt dire "obj instanceof moment;" ?
NoBrainer
3

moment () instance de moment;

sera toujours vrai, car si vous avez

  • moment (non défini) instance de moment
  • moment ("bonjour") instance de moment

vous créez toujours un objet moment. Donc le seul moyen est de vérifier comme ça

  • moment (propriété) .isValid ()
Fabien Sartori
la source