Bir değişkenin Moment.js nesnesi olup olmadığı nasıl test edilir?


93

Uygulamamda, bazı girişlerin arka uçtan doldurulduğu ve diğer girişlerin kullanıcı tarafından (bir timegirişe) girildiği bir HTML formu var . Bir onChangekullanıcı bir değer değiştirdiğinde fonksiyonu her giriş üzerinden çalışır.

Arka uçtan doldurulan girdiler momentnesnelere dönüştürülür , kullanıcı tarafından girilen tarihler yalnızca dizelerdir. Bu, onChangeişlevin bazı momentnesnelerle ve bazı dizelerle karşılaştığı anlamına gelir . Hangi girdilerin momentnesne olduğunu ve hangilerinin olmadığını bilmem gerekiyor .

Bir değişkenin bir momentnesne olup olmadığını test etmek için önerilen yöntem nedir ?

momentNesnelerin bir _isAMomentObjectözelliği olduğunu fark ettim , ancak bir değişkenin momentnesne olup olmadığını test etmenin başka bir yolu olup olmadığını merak ediyorum .

Denediğim başka bir seçenek momentde değişkeni ne olursa olsun çağırmak . Bu, stringdeğişkenleri momentnesnelere dönüştürür ve mevcut momentnesneleri etkilemiyor gibi görünür.

Yanıtlar:


98

Moment'in tam da böyle bir amaç için bir isMomentyöntemi var . Ne arayacağınızı bilmiyorsanız, belgelerde bulmak özellikle kolay değildir.

Önce denetler instanceofve sonra başarısız olursa (örneğin belirli alt sınıflandırma veya bölgeler arası durumlarda) _isAMomentObjectözelliği test eder .


ya güçlü bir şekilde yazılmamışsa? moment.isMoment (girdi);
Don Thomas Boyle

3
@DonThomasBoyle bu JavaScript'tir: güçlü bir yazım yoktur. 'Güçlü', yazmak için belirsiz bir terimdir, ancak hemen hemen her türlü olası tanımla (belki bellek güvenliği dışında) JS türleri zayıftır. Eğer o darbe up sahip olabileceği tek yoludur inputolduğu nullveya undefinedtam anlamıyla herhangi bir boş olmayan JS nesne veya hatta ilkel değer sadece bir boolean dönecektir.
Jared Smith

35

Bir instanceofan olup olmadığını kontrol edebilirsiniz :

moment() instanceof moment; // true

6
Sadece örnek ve anın kendisi aynı pencerede ise.
JAAulde

2
Bu her zaman doğrudur, çünkü moment () her zaman bir moment nesnesi yaratır. Bunun yerine "obj instanceof moment" mi demek istediniz; ?
NoBrainer

İnstanceof kullanmanın tehlikesi, örneğin bir anlık bağımlılıktan yaratılabileceği, ancak başka bir bağımlılıktan moment fonksiyonuna karşı test edecek olmasıdır. Yani, moment nesnesini oluşturan kod, test eden koddan başka bir oluşturma işlevi kullanıyorsa, bu bozulacaktır. Bunun ne zaman olabileceğine bir örnek, yukarıdaki testi çalıştıran kodun, anın başka bir sürümüne bağlı olan ayrı bir npm paketinde olmasıdır.
Henrik Hansson

3

moment () anın örneği;

her zaman doğru olacak, çünkü eğer varsa

  • an (tanımsız) anı
  • an ("merhaba") anı

her zaman bir moment nesnesi yaratırsınız. Yani tek yol böyle kontrol etmektir

  • moment (özellik) .isValid ()
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.