Подтвердить что ты не робот

JavaScript instanceof и moment.js

Я пытаюсь понять типы в мире JavaScript. Моя страница использует moment.js. У меня есть функция, которая иногда возвращает moment() и другие времена, возвращает string (унаследованный код ушел в прошлое).

Мой вид кода выглядит следующим образом:

var now = getDate();
if (now instanceof moment) {
  console.log('we have a moment.');
} else {
  console.log('we have a string.');
}


function getDate() {
  var result = null;
  // Sometimes result will be a moment(), other times, result will be a string.
  result = moment();
  return result;
}

Когда я выполняю код выше, я никогда не получаю we have a moment.. Даже если я вручную сделаю set result = moment();. Почему это? Я недопонимаю instanceof или moment?

4b9b3361

Ответ 1

Прежде всего, instanceof не является абсолютно надежным.

Во-вторых, moment() возвращает экземпляр класса Moment, который не отображается пользователю. Следующий код доказывает это:

moment().__proto__.constructor // function Moment()
moment().constructor === moment; // false

В-третьих, Moment предоставляет функцию moment.isMoment, которая решит вашу проблему.

И последнее, но не менее важное - ваш код должен использовать согласованные типы возвращаемых данных - всегда возвращать экземпляры Moment или всегда возвращать строки. Это уменьшит вашу боль в будущем.

Вы можете убедиться, что у вас всегда есть экземпляр Moment, вызывая функцию Moment - moment(string) равно значению moment(moment(string)), поэтому вы всегда можете преобразовать свой аргумент в экземпляр Moment.

Ответ 2

Момент версии 2.13.0

Существует статический метод .isMoment:

введите описание изображения здесь