与日期对象相乘 - javascript

Man*_*day 4 javascript date

我遇到了这段代码var timeStamp = 1 * new Date();,令我惊讶的是它自1970/01/01以来以毫秒为单位返回值.这相当于使用.getTime()方法!

引擎盖下发生了什么?类型转换概念在这里工作,它基本上将new Date()值转换为毫秒?

T.J*_*der 7

引擎盖下发生了什么?

简短版本:

因为它在数学运算中使用,所以将日期转换为数字,当您将日期转换为数字时,您获得的数字是毫秒 - 自该纪元(例如getTime()).

长版:

  1. 乘法运算符调用抽象操作ToNumber对其操作数.

  2. 对于像Dates 这样的对象,它调用对象的抽象操作ToPrimitive,"首选类型"为"数字".

  3. 对于大多数类型的对象(包括Dates),ToPrimitive调用抽象操作[[DefaultValue]],将首选类型作为"提示"传递.

  4. [[DefaultValue]]使用hint ="number"调用valueOf对象.(valueOf是一种真正的方法,与上面的抽象操作不同.)

  5. 对于Date对象,valueOf返回"时间值",即您获得的值getTime.


旁注:没有理由我可以考虑使用,var timeStamp = 1 * new Date()而不是说,var timeStamp = +new Date()具有相同的效果.或者当然,在任何现代引擎上(和垫片都是微不足道的),var timeStamp = Date.now()(更多Date.now).