JavaScript 实例化和 moment.js

JavaScript instanceof and moment.js

我正在尝试理解 JavaScript 世界中的类型。我的页面正在使用 moment.js。我有一个功能,有时 returns moment() 有时 returns 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();。这是为什么?我是误会了 instanceof 还是 moment

首先,instanceof 并不完全可靠。

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

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

第三,moment提供功能moment.isMoment可以解决您的问题。

最后但同样重要的是 - 您的代码应该使用一致的 return 类型 - 始终 return moment 实例或始终 return 字符串。它会减少你未来的痛苦。

您可以通过调用 moment 函数确保始终拥有 moment 实例 - moment(string) 的值等于 moment(moment(string)),因此您始终可以将参数转换为moment 个实例。

朋友圈版本2.13.0

有静态方法.isMoment: