¿Cómo probar si una variable es un objeto Moment.js?

92

Mi aplicación tiene un formulario HTML con algunas entradas completadas desde el backend y otras entradas ingresadas por el usuario (en una timeentrada). Una onChangefunción se ejecuta a través de cada entrada cuando el usuario cambia un valor.

Las entradas llenas de backend se convierten en momentobjetos, las fechas ingresadas por el usuario son simples cadenas. Esto significa que la onChangefunción encuentra algunos momentobjetos y algunas cadenas. Necesito saber qué entradas son momentobjetos y cuáles no.

¿Cuál es el método recomendado para probar si una variable es un momentobjeto?

He notado que los momentobjetos tienen una _isAMomentObjectpropiedad, pero me pregunto si hay otra forma de probar si una variable es un momentobjeto.

Otra opción que he probado es llamar momenta la variable independientemente. Esto convierte las stringvariables en momentobjetos y no parece afectar a los momentobjetos existentes .

Brett DeWoody
fuente

Respuestas:

95

Moment tiene un isMomentmétodo para tal propósito. No es particularmente fácil de encontrar en los documentos a menos que sepa qué buscar.

Primero verifica instanceofy luego, si falla (por ejemplo, en ciertas situaciones de subclases o reinos cruzados), probará la _isAMomentObjectpropiedad.

Jared Smith
fuente
¿y si no está fuertemente tipado? moment.isMoment (entrada);
Don Thomas Boyle
3
@DonThomasBoyle esto es JavaScript: no hay escritura fuerte. 'Fuerte' es una especie de término ambiguo para escribir, pero según casi cualquier definición posible (aparte de la seguridad de la memoria), los tipos JS son débiles. La única forma en que puede hacer estallar es si inputes nullo undefined, literalmente, cualquier objeto JS no nulo o incluso un valor primitivo simplemente devolverá un booleano.
Jared Smith
34

Puedes comprobar si es un instanceofmomento:

moment() instanceof moment; // true
Niels Heisterkamp
fuente
6
Solo si la instancia y el momento en sí están en la misma ventana.
JAAulde
1
Esto siempre es cierto, porque moment () siempre crearía un objeto de momento. ¿En lugar de eso quiso decir "obj instancia de momento;" ?
NoBrainer
3

momento () instancia de momento;

siempre será verdad, porque si tienes

  • momento (indefinido) instancia de momento
  • momento ("hola") instancia de momento

siempre estás creando un objeto de momento. Entonces la única forma es verificar así

  • momento (propiedad) .isValid ()
Fabien Sartori
fuente