Bagaimana cara menguji apakah suatu variabel adalah objek Moment.js?

93

Aplikasi saya memiliki bentuk HTML dengan beberapa masukan yang diisi dari backend dan masukan lain yang dimasukkan oleh pengguna (dalam timemasukan). Suatu onChangefungsi berjalan melalui setiap masukan saat pengguna mengubah nilai.

Input yang diisi dari backend diubah menjadi momentobjek, tanggal yang dimasukkan pengguna hanyalah string. Ini berarti onChangefungsi bertemu dengan beberapa momentobjek, dan beberapa string. Saya perlu tahu input mana yang merupakan momentobjek dan mana yang bukan.

Apa metode yang direkomendasikan untuk menguji jika variabel adalah momentobjek?

Saya telah memperhatikan momentobjek memiliki _isAMomentObjectproperti tetapi saya bertanya-tanya apakah ada cara lain untuk menguji apakah variabel adalah momentobjek.

Opsi lain yang saya coba adalah memanggil momentvariabel apa pun. Ini mengubah stringvariabel menjadi momentobjek dan sepertinya tidak mempengaruhi momentobjek yang ada .

Brett DeWoody
sumber

Jawaban:

98

Momen memiliki isMomentmetode untuk tujuan seperti itu. Tidak mudah untuk menemukannya di dokumen kecuali Anda tahu apa yang harus dicari.

Ini pertama kali memeriksa instanceofdan kemudian gagal (misalnya dalam subclassing tertentu atau situasi lintas-alam) itu akan menguji _isAMomentObjectproperti.

Jared Smith
sumber
bagaimana jika tidak diketik dengan kuat? moment.isMoment (masukan);
Don Thomas Boyle
3
@DonThomasBoyle ini JavaScript: tidak ada pengetikan yang kuat. 'Kuat' adalah jenis istilah yang ambigu untuk pengetikan, tetapi hampir semua definisi yang memungkinkan (selain mungkin keamanan memori) jenis JS lemah. Satu-satunya cara bahwa Anda dapat memiliki yang blow up adalah jika inputadalah nullatau undefined, secara harfiah setiap non-null JS objek atau bahkan nilai primitif hanya akan kembali boolean.
Jared Smith
35

Anda dapat memeriksa apakah ini suatu instanceofsaat:

moment() instanceof moment; // true
Niels Heisterkamp
sumber
6
Hanya jika instance dan momen itu sendiri berada di jendela yang sama.
JAAulde
2
Ini selalu benar, karena momen () akan selalu membuat objek momen. Apakah yang Anda maksud adalah "objek momen saat;" ?
NoBrainer
Bahaya menggunakan instanceof adalah bahwa instance tersebut mungkin dibuat dari ketergantungan satu momen tetapi akan menguji fungsi momen dari ketergantungan lain. Yaitu ini akan rusak jika kode yang membuat objek momen menggunakan fungsi pembuatan lain selain kode yang menguji. Contoh kapan hal ini bisa terjadi adalah jika kode yang menjalankan pengujian di atas berada dalam paket npm terpisah yang bergantung pada versi momen lain.
Henrik Hansson
3

momen () contoh momen;

akan selalu benar, karena jika sudah

  • momen (tidak ditentukan) contoh momen
  • momen ("halo") contoh momen

Anda selalu membuat objek momen. Jadi satu-satunya cara adalah memeriksa seperti ini

  • momen (properti) .isValid ()
Fabien Sartori
sumber