我遇到了这段代码var timeStamp = 1 * new Date();,令我惊讶的是它自1970/01/01以来以毫秒为单位返回值.这相当于使用.getTime()方法!
引擎盖下发生了什么?类型转换概念在这里工作,它基本上将new Date()值转换为毫秒?
引擎盖下发生了什么?
简短版本:
因为它在数学运算中使用,所以将日期转换为数字,当您将日期转换为数字时,您获得的数字是毫秒 - 自该纪元(例如getTime()).
长版:
对于像Dates 这样的对象,它调用对象的抽象操作ToPrimitive,"首选类型"为"数字".
对于大多数类型的对象(包括Dates),ToPrimitive调用抽象操作[[DefaultValue]],将首选类型作为"提示"传递.
[[DefaultValue]]使用hint ="number"调用valueOf对象.(valueOf是一种真正的方法,与上面的抽象操作不同.)
对于Date对象,valueOf返回"时间值",即您获得的值getTime.
旁注:没有理由我可以考虑使用,var timeStamp = 1 * new Date()而不是说,var timeStamp = +new Date()具有相同的效果.或者当然,在任何现代引擎上(和垫片都是微不足道的),var timeStamp = Date.now()(更多Date.now).