Як перевірити, чи є змінна об’єктом Moment.js?


93

У моїй програмі є форма HTML з деякими входами, заповненими із серверної частини, та іншими входами, які вводить користувач (у timeвведенні). onChangeФункція проходить через кожен вхід , коли користувач змінює значення.

Вхідні дані, заповнені з серверної бази, перетворюються в momentоб'єкти, введені користувачем дати є простими рядками. Це означає, що onChangeфункція зустрічає деякі momentоб'єкти та деякі рядки. Мені потрібно знати, які входи є momentоб’єктами, а які ні.

Який рекомендований метод тестування, якщо змінна є momentоб’єктом?

Я помітив, що momentоб’єкти мають _isAMomentObjectвластивість, але мені цікаво, чи існує інший спосіб перевірити, чи є змінна momentоб’єктом.

Ще один варіант, який я спробував, - momentце незалежно від виклику змінної. Це перетворює stringзмінні в momentоб'єкти і, здається, не впливає на існуючі momentоб'єкти.

Відповіді:


98

Момент має isMomentметод саме для такої мети. Це не особливо легко знайти в документах, якщо ви не знаєте, на що звертати увагу.

Спочатку він перевіряє, instanceofа потім, якщо його не вдається (наприклад, у певних ситуаціях підкласів або перехресної сфери), він перевіряє _isAMomentObjectвластивість.


що якщо це не набрано сильно? moment.isMoment (введення);
Дон Томас Бойл

3
@DonThomasBoyle це JavaScript: немає сильного набору тексту. "Сильний" - це різновид неоднозначного терміну для набору тексту, але майже за будь-яким можливим визначенням (крім можливої ​​безпеки пам'яті) типи JS є слабкими. Єдиний спосіб , яким ви можете мати , що роздуття, якщо inputє , nullабо undefined, в буквальному сенсі будь-який непорожній JS об'єкт або навіть елементарне значення , просто повертають логічне значення.
Джаред Сміт

35

Ви можете перевірити, чи це instanceofмомент:

moment() instanceof moment; // true

6
Тільки якщо екземпляр і сам момент знаходяться в одному вікні.
JAAulde

2
Це завжди відповідає дійсності, оскільки moment () завжди створює моментний об’єкт. Ви натомість мали на увазі "obj instanceof moment;" ?
NoBrainer

Небезпека використання instanceof полягає в тому, що екземпляр може бути створений із залежності одного моменту, але буде перевіряти функцію моменту з іншої залежності. Тобто це зламається, якщо код, який створив момент об'єкта, використовував іншу функцію створення, ніж код, який тестує. Прикладом того, коли це може статися, є те, що код, який запускає тест вище, знаходиться в окремому пакунку npm, який залежить від іншої версії моменту.
Хенрік Ханссон,

3

moment () instanceof moment;

завжди буде правдою, бо якщо маєш

  • момент (невизначений) instanceof moment
  • moment ("привіт") instanceof moment

ви завжди створюєте моментний об'єкт. Тож єдиний спосіб - перевірити так

  • момент (властивість) .isValid ()
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.