JavaScript instanceof et moment.js
J'essaie de comprendre les types dans le monde JavaScript. Ma page utilise moment.js . J'ai une fonction qui renvoie parfois un moment()
et d'autres fois, renvoie un string
(c'est le code hérité qui est devenu sauvage).
Mon code ressemble à ceci:
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;
}
Quand j'exécute le code ci-dessus, je n'obtiens jamais we have a moment.
. Même si je fais manuellement set result = moment();
. Pourquoi est-ce? Suis-je un malentendu instanceof
ou moment
?
2 réponses
Tout d'Abord, instanceof
n'est pas parfaitement fiable.
Deuxièmement, moment()
renvoie une instance de la classe Moment
qui n'est pas exposée à l'utilisateur. Le code suivant prouve ceci:
moment().__proto__.constructor // function Moment()
moment().constructor === moment; // false
Troisièmement, moment
fournissez une fonction moment.isMoment
qui résoudra votre problème.
Et enfin, mais non des moindres - votre code doit utiliser des types de retour cohérents - toujours renvoyer des instances moment
ou toujours renvoyer des chaînes. Il permettra de réduire votre douleur à l'avenir.
, vous pouvez Vous assurer que vous avez toujours moment
exemple par l'appel de moment
function - moment(string)
est égale à la valeur moment(moment(string))
, de sorte que vous pouvez toujours convertir votre argument moment
exemple.