ฉันเคยเห็นสิ่งนี้ในไม่กี่แห่ง
function fn() {
return +new Date;
}
และฉันเห็นว่ามันส่งคืนการประทับเวลาแทนที่จะเป็นวัตถุวันที่ แต่ฉันไม่พบเอกสารใด ๆ เกี่ยวกับสิ่งที่เครื่องหมายบวกกำลังทำอยู่
มีใครอธิบายได้บ้าง
ฉันเคยเห็นสิ่งนี้ในไม่กี่แห่ง
function fn() {
return +new Date;
}
และฉันเห็นว่ามันส่งคืนการประทับเวลาแทนที่จะเป็นวัตถุวันที่ แต่ฉันไม่พบเอกสารใด ๆ เกี่ยวกับสิ่งที่เครื่องหมายบวกกำลังทำอยู่
มีใครอธิบายได้บ้าง
คำตอบ:
นั่นคือตัวดำเนินการ + unary ซึ่งเทียบเท่ากับ:
function(){ return Number(new Date); }
getTime
วิธีการที่กำหนดไว้ในวัตถุวันที่!
.getTime()
จะทำประกันเสมอ
Date.now()
ซึ่งเป็นวิธีที่ต้องการในการรับวันที่และเวลาเป็นมิลลิวินาที
JavaScript ถูกพิมพ์อย่างหลวม ๆ ดังนั้นมันจึงทำการบังคับ / แปลงประเภทในบางสถานการณ์:
http://blog.jeremymartin.name/2008/03/understanding-loose-typing-in.html
http://www.jibbering.com/faq/faq_notes/type_convert.html
ตัวอย่างอื่น ๆ :
>>> +new Date()
1224589625406
>>> +"3"
3
>>> +true
1
>>> 3 == "3"
true
วันที่ JavaScript สามารถเขียนเป็นสตริง:
พ.ย. 10 2015 12:02:54 GMT + 0530 (IST)
หรือเป็นตัวเลข:
1441866774938
วันที่เขียนเป็นตัวเลขระบุจำนวนมิลลิวินาทีตั้งแต่ 1 มกราคม 1970, 00:00:00
เมื่อมาถึงคำถามของคุณพบว่าการเพิ่ม '+' หลังจากผู้ประกอบการที่ได้รับมอบหมาย '=' ทำให้การแปลง Date เป็นค่าตัวเลขที่เท่ากัน
เดียวกันสามารถทำได้โดยใช้ฟังก์ชัน Number () เช่น Number (new Date ());
var date = +new Date(); //same as 'var date =number(new Date());'
นี่คือข้อกำหนดเกี่ยวกับตัวดำเนินการ "เพิ่ม unary" หวังว่ามันจะช่วย ...
เพียงเพื่อให้ข้อมูลเพิ่มเติม:
หากคุณจำได้ว่าเมื่อคุณต้องการหาความแตกต่างของเวลาระหว่างวันที่สองวันคุณจะทำดังนี้
var d1 = new Date("2000/01/01 00:00:00");
var d2 = new Date("2000/01/01 00:00:01"); //one second later
var t = d2 - d1; //will be 1000 (msec) = 1 sec
typeof t; // "number"
ตอนนี้ถ้าคุณตรวจสอบประเภทของ d1-0 ก็เป็นตัวเลขเช่นกัน:
t = new Date() - 0; //numeric value of Date: number of msec's since 1 Jan 1970.
typeof t; // "number"
that + จะแปลง Date เป็น Number ด้วย:
typeof (+new Date()) //"number"
แต่ทราบว่า0 + new Date()
จะไม่ได้รับการปฏิบัติในทำนองเดียวกัน! มันจะถูกตัดแบ่งเป็นสตริง:
0 + new Date() // "0Tue Oct 16 05:03:24 PDT 2018"
มันเป็นตัวดำเนินการเพิ่ม unaryและยังใช้สำหรับการแปลงตัวเลขอย่างชัดเจนดังนั้นเมื่อคุณโทร+new Date()
มันจะพยายามรับค่าตัวเลขของวัตถุนั้นโดยใช้valueOf()
เหมือนกับที่เราได้รับสายจากtoString()
new Date().valueOf() == (+new Date) // true
มันทำสิ่งเดียวกับ:
ฟังก์ชั่น () {กลับ 0 + วันที่ใหม่; }
ที่มีผลลัพธ์เช่นเดียวกับ:
ฟังก์ชัน () {ส่งคืนวันที่ใหม่ (). getTime (); }
new Date/1