如何测试变量是否为Moment.js对象?


92

我的应用程序具有HTML表单,其中一些输入是从后端填充的,而其他输入是由用户time输入的(在输入中)。的onChange功能,当用户改变一个值贯穿每个输入。

从后端填充的输入将转换为moment对象,用户输入的日期仅是字符串。这意味着该onChange函数遇到一些moment对象和一些字符串。我需要知道哪些输入是moment对象,哪些不是。

建议使用什么方法来测试变量是否是moment对象?

我注意到moment对象具有_isAMomentObject属性,但是我想知道是否还有另一种方法来测试变量是否是moment对象。

我尝试过的另一个选择是moment无论如何都调用变量。这会将string变量转换为moment对象,并且似乎不会影响现有moment对象。

Answers:


94

矩有一种用于这种目的的isMoment方法。除非您知道要查找的内容,否则在文档中找到它并不是特别容易。

它首先检查instanceof,然后失败(例如,在某些子类化或跨领域情况下)它将测试该_isAMomentObject属性。


如果不是强类型怎么办?moment.isMoment(输入);
唐·汤玛斯·博伊尔

3
@DonThomasBoyle这是JavaScript:没有强类型。“强”是一个用于键入的模棱两可的术语,但是从几乎所有可能的定义(也许不是内存安全性)来看,JS类型都很弱。炸毁的唯一方法是if inputnullundefined,实际上任何非null的JS对象甚至原始值都将返回一个布尔值。
贾里德·史密斯

34

您可以检查一下是否是instanceof片刻:

moment() instanceof moment; // true

6
仅当实例和时刻本身在同一窗口中时。
JAAulde '16

1
始终如此,因为moment()总是会创建一个矩对象。相反,您的意思是“ obj instanceof moment;” ?
NoBrainer

3

moment()实例实例;

将永远是真的,因为如果你有

  • 瞬间的时刻(未定义)
  • moment(“ hello”)瞬间实例

您总是在创建一个时刻对象。所以唯一的办法就是这样检查

  • moment(property).isValid()
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.