为什么'new Date()* 1'会产生Javascript时间戳?

时间:2015-07-07 14:18:53

标签: javascript

我有以下获取时间戳的方法:

board/freescale/mx6sabresd/mx6q_4x_mt41j128.cfg

但我很困惑:为什么我能使用最后一种方法获得时间戳?

2 个答案:

答案 0 :(得分:3)

这是因为Date()对象可以直接转换为数字(时间戳),当应用数学运算符时,JavaScript会为我们转换它。

获得时间戳的更快捷的方法是使用Unary Plus:

+new Date();
  

一元加运算符在其操作数之前,并计算其操作数,但是如果它已经没有,则尝试将其转换为数字。虽然一元否定( - )也可以转换非数字,但是一元加号是将某些东西转换为数字的最快和最优选的方式,因为它不会对数字执行任何其他操作。

     

- MDN's Unary Plus documentation

同样适用于字符串"1" * 1等于1,因为由于存在乘法运算符("1"),JavaScript会自动将*转换为数字。

答案 1 :(得分:1)

关于JavaScript的一个奇怪的事情是,如果你尝试在两个变量之间执行操作,它会尝试将它们转换为可以执行此操作的类型。但这可能会以不同的方式发生,因此例如"2" * 2 === 4为真,但"2" + 2 === "22"也是如此,因为它首先转到string运算符的+版本。

当您使用Date并尝试进行乘法或除法时,JavaScript会理解将Date转换为数字时间戳值。因此,您在上面看到了令人惊讶的结果。

然而:

new Date() + 1  

"Tue Jul 07 2015 15:20:17 GMT+0100 (GMT Daylight Time)1"中的结果,因为日期也可以视为字符串。

这是JavaScript的许多怪癖中的一个,它有助于理解何时遇到这个奇怪的错误,但如果您希望能够一目了然地理解它,建议您不要在代码中使用后来(剧透警告:你这么做!)