JavaScript中var now = +new Date();语句功能解析求助
关于
var a = +new B();语法的解释 嘿,我来帮你把这个语法彻底讲明白~
首先你观察得很对:这里的+不是加法运算符,而是一元加号运算符,它的核心作用是将后面的操作数强制转换为数值类型。
拆解var now = +new Date();的执行过程
new Date():创建一个Date对象实例,它代表当前的时间点(注意:它返回的是对象,不是你以为的日期字符串——只有当你主动调用toString()或者隐式触发字符串转换时,才会变成类似Wed Oct 11 2023 12:34:56 GMT+0800 (中国标准时间)的字符串)。+作用在这个Date对象上:JS会自动调用该对象的valueOf()方法,而Date对象的valueOf()方法返回的是时间戳——也就是从1970年1月1日00:00:00 UTC到当前时间的毫秒数,是一个纯数值。- 最后把这个数值赋值给变量
now,所以后面才能直接做减法运算。
等价写法
你之前的推测有点小偏差,正确的等价写法有这些:
var now = Date.now();(这是ES5新增的Date构造函数的静态方法,最推荐的写法,可读性更强)var now = new Date().getTime();(显式调用getTime()获取时间戳)var now = new Date().valueOf();(直接调用valueOf(),和一元加号的底层逻辑一致)
扩展:+new B()的通用逻辑
如果把这个语法推广到+new B(),它的本质是:
- 调用
new B()创建一个B类的实例对象 - 用一元加号强制将这个对象转换为数值:JS会先尝试调用对象的
valueOf()方法,如果返回的是原始值(数值、字符串、布尔值),就把这个原始值转换成数值;如果valueOf()返回的还是对象,就会调用toString()方法,再把得到的字符串转换成数值。 - 如果最终无法转换成有效的数值,结果会是
NaN。
所以对于Date对象来说,这个写法是一种获取时间戳的简洁方式,但现在更推荐用Date.now(),可读性更强~
内容的提问来源于stack exchange,提问作者eeze
相关产品推荐
相关产品推荐

