วิธีทดสอบว่าตัวแปรเป็นวัตถุ Moment.js หรือไม่?


93

แอปพลิเคชันของฉันมีรูปแบบ HTML โดยมีอินพุตบางส่วนที่เติมจากแบ็กเอนด์และอินพุตอื่น ๆ ที่ผู้ใช้ป้อน (ในtimeอินพุต) onChangeฟังก์ชั่นที่ไหลผ่านแต่ละป้อนข้อมูลเมื่อผู้ใช้มีการเปลี่ยนแปลงค่า

อินพุตที่เติมจากแบ็กเอนด์จะถูกแปลงเป็นmomentอ็อบเจ็กต์วันที่ที่ผู้ใช้ป้อนเป็นเพียงสตริง ซึ่งหมายความว่าonChangeฟังก์ชันพบบางmomentวัตถุและบางสตริง ฉันต้องการทราบว่าปัจจัยการผลิตใดเป็นmomentวัตถุและสิ่งที่ไม่ใช่

วิธีที่แนะนำสำหรับการทดสอบว่าตัวแปรเป็นmomentวัตถุคืออะไร

ฉันสังเกตเห็นว่าmomentวัตถุมี_isAMomentObjectคุณสมบัติ แต่ฉันสงสัยว่ามีวิธีอื่นในการทดสอบว่าตัวแปรเป็นmomentวัตถุหรือไม่

อีกทางเลือกหนึ่งที่ฉันได้ลองคือเรียกmomentใช้ตัวแปรโดยไม่คำนึงถึง สิ่งนี้จะแปลงstringตัวแปรเป็นmomentวัตถุและดูเหมือนจะไม่มีผลกับmomentวัตถุที่มีอยู่

คำตอบ:


98

Moment มีisMomentวิธีการเพื่อจุดประสงค์ดังกล่าว การค้นหาในเอกสารนั้นไม่ใช่เรื่องง่ายเว้นแต่คุณจะรู้ว่าต้องค้นหาอะไร

ขั้นแรกจะตรวจสอบinstanceofแล้วล้มเหลว (เช่นในบางสถานการณ์ย่อยหรือข้ามขอบเขต) จะทดสอบ_isAMomentObjectคุณสมบัติ


จะเกิดอะไรขึ้นถ้ามันไม่ได้พิมพ์อย่างรุนแรง? moment.isMoment (อินพุต);
Don Thomas Boyle

3
@DonThomasBoyle นี่คือ JavaScript: ไม่มีการพิมพ์ที่รุนแรง 'Strong' เป็นคำที่ไม่ชัดเจนสำหรับการพิมพ์ แต่โดยคำจำกัดความที่เป็นไปได้ (นอกเหนือจากความปลอดภัยของหน่วยความจำ) ประเภท JS นั้นอ่อนแอ วิธีเดียวที่คุณสามารถระเบิดได้คือถ้าinputเป็นnullหรือundefinedตามตัวอักษรวัตถุ JS ที่ไม่เป็นโมฆะหรือแม้แต่ค่าดั้งเดิมก็จะส่งคืนบูลีน
Jared Smith

35

คุณสามารถตรวจสอบได้ว่าเป็นinstanceofช่วงเวลาหรือไม่:

moment() instanceof moment; // true

6
เฉพาะในกรณีที่อินสแตนซ์และช่วงเวลาอยู่ในหน้าต่างเดียวกัน
JAAulde

2
นี่เป็นความจริงเสมอเพราะ moment () มักจะสร้างวัตถุโมเมนต์ คุณหมายถึง "obj instanceof moment แทนหรือไม่" เหรอ?
NoBrainer

อันตรายจากการใช้อินสแตนซ์ของอินสแตนซ์คืออินสแตนซ์อาจถูกสร้างขึ้นจากการพึ่งพาช่วงเวลาเดียว แต่จะทดสอบกับฟังก์ชันโมเมนต์จากการพึ่งพาอื่น กล่าวคือจะหยุดทำงานหากรหัสที่สร้างวัตถุช่วงเวลาใช้ฟังก์ชันการสร้างอื่นนอกเหนือจากรหัสที่ทดสอบ ตัวอย่างของเวลาที่สามารถเกิดขึ้นได้คือถ้าโค้ดที่รันการทดสอบด้านบนอยู่ในแพ็กเกจ npm แยกต่างหากซึ่งขึ้นอยู่กับช่วงเวลาอื่น
Henrik Hansson

3

moment () เช่นโมเมนต์;

จะเป็นจริงเสมอเพราะถ้าคุณมี

  • ช่วงเวลา (ไม่ได้กำหนด) เช่นช่วงเวลา
  • ช่วงเวลา ("สวัสดี") เช่นช่วงเวลา

คุณมักจะสร้างวัตถุช่วงเวลา ดังนั้นวิธีเดียวคือตรวจสอบแบบนี้

  • ช่วงเวลา (คุณสมบัติ) .isValid ()
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.