我试图理解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();
。这是为什么?我误解了instanceof
或moment
吗?
答案 0 :(得分:42)
答案 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}}实例。