Làm cách nào để kiểm tra xem một biến có phải là đối tượng Moment.js không?


92

Ứng dụng của tôi có một biểu mẫu HTML với một số đầu vào được điền từ phần phụ trợ và các đầu vào khác được người dùng nhập (trong một timeđầu vào). Một onChangehàm chạy qua mỗi đầu vào khi người dùng thay đổi một giá trị.

Các đầu vào được điền từ phần phụ trợ được chuyển đổi thành momentcác đối tượng, ngày do người dùng nhập chỉ là các chuỗi. Điều này có nghĩa là onChangehàm gặp một số momentđối tượng và một số chuỗi. Tôi cần biết đầu vào nào là momentđối tượng và đầu vào nào không.

Phương pháp được đề xuất để kiểm tra nếu một biến là một momentđối tượng là gì?

Tôi đã nhận thấy momentcác đối tượng có một thuộc _isAMomentObjecttính nhưng tôi đang tự hỏi liệu có cách nào khác để kiểm tra xem một biến có phải là một momentđối tượng hay không.

Một tùy chọn khác mà tôi đã thử là gọi momentbiến bất chấp. Điều này chuyển đổi các stringbiến thành momentcác đối tượng và dường như không ảnh hưởng đến các momentđối tượng hiện có .

Câu trả lời:


94

Moment có một isMomentphương pháp cho một mục đích như vậy. Nó không đặc biệt dễ tìm trong tài liệu trừ khi bạn biết mình cần tìm gì.

Đầu tiên, nó sẽ kiểm tra instanceofvà sau đó nếu không đạt được điều đó (ví dụ như trong một số tình huống phân lớp hoặc vùng chéo nhất định) nó sẽ kiểm tra thuộc _isAMomentObjecttính.


nếu nó không được gõ mạnh thì sao? moment.isMoment (đầu vào);
Don Thomas Boyle

3
@DonThomasBoyle đây là JavaScript: không có kiểu gõ mạnh. 'Strong' là một loại thuật ngữ không rõ ràng để nhập, nhưng theo khá nhiều định nghĩa có thể có (ngoài việc có lẽ là an toàn cho bộ nhớ) thì các loại JS đều yếu. Cách duy nhất mà bạn có thể giải quyết vấn đề đó là nếu inputnullhoặc undefined, nghĩa đen là bất kỳ đối tượng JS nào không phải null hoặc thậm chí giá trị nguyên thủy sẽ chỉ trả về một boolean.
Jared Smith

34

Bạn có thể kiểm tra xem đó là một instanceofthời điểm:

moment() instanceof moment; // true

6
Chỉ khi bản thân cá thể và thời điểm nằm trong cùng một cửa sổ.
JAAulde

1
Điều này luôn đúng, bởi vì moment () sẽ luôn tạo ra một đối tượng moment. Thay vào đó, ý của bạn là "obj instanceof moment;" ?
NoBrainer

3

moment () instanceof thời điểm;

sẽ luôn đúng, bởi vì nếu bạn có

  • khoảnh khắc (không xác định) instanceof moment
  • khoảnh khắc ("xin chào") instanceof moment

bạn luôn tạo ra một đối tượng thời điểm. Vì vậy, cách duy nhất là kiểm tra như thế này

  • moment (thuộc tính) .isValid ()
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.