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.

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ść.


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

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 ()
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.