JavaScript instanceof和moment.js

时间:2015-08-10 13:35:56

标签: javascript momentjs

我试图理解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.。即使我手动设置result = moment();。这是为什么?我误解了instanceofmoment吗?

2 个答案:

答案 0 :(得分:42)

时刻版本2.13.0

有一种静态方法.isMoment

enter image description here

答案 1 :(得分:33)

首先,instanceof并非完全可靠。

其次,moment()返回未向用户公开的Moment类的实例。以下代码证明了这一点:

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

第三,moment提供可以解决问题的函数moment.isMoment

最后,但并非最不重要 - 您的代码应使用一致的返回类型 - 始终返回moment个实例或始终返回字符串。它会减少你将来的痛苦。

您可以通过调用moment函数 - moment等于值moment(string)来确保始终拥有moment(moment(string))个实例,这样您就可以随时将参数转换为{{ 1}}实例。