Jak sprawdzić, czy zmienna jest obiektem Moment.js?

93

Moja aplikacja ma formularz HTML z niektórymi danymi wejściowymi wypełnionymi z zaplecza i innymi danymi wejściowymi wprowadzanymi przez użytkownika (w timedanych wejściowych). onChangeFunkcja biegnie przez każde wejście, gdy użytkownik zmienia wartość.

Dane wejściowe wypełnione z zaplecza są konwertowane na momentobiekty, daty wprowadzone przez użytkownika są zwykłymi ciągami. Oznacza to, że onChangefunkcja napotyka pewne momentobiekty i niektóre łańcuchy. Muszę wiedzieć, które dane wejściowe są momentobiektami, a które nie.

Jaka jest zalecana metoda testowania, jeśli zmienna jest momentobiektem?

Zauważyłem, że momentobiekty mają _isAMomentObjectwłaściwość, ale zastanawiam się, czy istnieje inny sposób sprawdzenia, czy zmienna jest momentobiektem.

Inną opcją, którą wypróbowałem, jest wywołanie momentzmiennej niezależnie. To konwertuje stringzmienne na momentobiekty i nie wydaje się wpływać na istniejące momentobiekty.

Brett DeWoody
źródło

Odpowiedzi:

98

Moment ma isMomentmetodę na taki cel. Nie jest to łatwe do znalezienia w dokumentach, chyba że wiesz, czego szukać.

Najpierw sprawdza, instanceofa następnie kończy się niepowodzeniem (na przykład w pewnych sytuacjach podklas lub między dziedzinami), że będzie testować _isAMomentObjectwłaściwość.

Jared Smith
źródło
co jeśli nie jest mocno wpisane? moment.isMoment (wejście);
Don Thomas Boyle
3
@DonThomasBoyle to jest JavaScript: nie ma silnego pisania. „Silny” to rodzaj niejednoznacznego określenia na typowanie, ale zgodnie z prawie każdą możliwą definicją (z wyjątkiem być może bezpieczeństwa pamięci) typy JS są słabe. Jedynym sposobem, w jaki możesz to wysadzić, jest to, że jeśli inputjest nulllub undefined, dosłownie każdy niezerowy obiekt JS lub nawet prymitywna wartość po prostu zwróci wartość logiczną.
Jared Smith
35

Możesz sprawdzić, czy to instanceofchwila:

moment() instanceof moment; // true
Niels Heisterkamp
źródło
6
Tylko wtedy, gdy instancja i sama chwila znajdują się w tym samym oknie.
JAAulde,
2
Jest to zawsze prawda, ponieważ moment () zawsze tworzyłby obiekt chwili. Czy zamiast tego miałeś na myśli „obj instanceof moment”; ?
NoBrainer
Niebezpieczeństwo korzystania z instanceof polega na tym, że instancja może zostać utworzona z zależności w jednym momencie, ale będzie testować funkcję momentu z innej zależności. To znaczy, że się to zepsuje, jeśli kod, który utworzył obiekt momentu, użył innej funkcji tworzenia niż kod, który testuje. Przykładem sytuacji, w której może się to zdarzyć, jest sytuacja, gdy kod uruchamiający powyższy test znajduje się w oddzielnym pakiecie npm, który zależy od innej wersji chwili.
Henrik Hansson
3

moment () instancja momentu;

zawsze będzie prawdziwe, bo jeśli tak

  • moment (nieokreślony) wystąpienie momentu
  • moment („cześć”) instancja chwili

zawsze tworzysz obiekt chwili. Więc jedynym sposobem jest sprawdzenie w ten sposób

  • moment (właściwość) .isValid ()
Fabien Sartori
źródło