意外的Javascript Date对象隐式转换

时间:2016-02-24 06:08:00

标签: javascript date implicit-conversion

为什么Javascript的Date对象为隐式转换返回不同的值?

号码转换:

+new Date()
// returns 1456293356618 as expected

字符串转换:

''+new Date()
// returns "Wed Feb 24 2016 09:26:28 GMT+0" but "1456293356618" as a string was expected 

我在哪里可以找到有关ECMAScript的文档以及v8源代码的实现?

编辑:我不是在寻找预期结果的解决方案。我想在规范中找到文档。

2 个答案:

答案 0 :(得分:2)

+运算符已超载。在:

+new Date()

将其视为unary + operator并将值强制转换为Number。在:

'' + new Date() // note one value is a string

将其视为string concatenation operator并将值强制转换为String。在:

5 + 6   // note both values are number

它被视为addition operator。由于这些值是数字,因此不需要强制。

请注意,+是否添加或连接取决于值,并在ECMAScript 2015 §12.7.3.1 step 11中进行了描述。

答案 1 :(得分:1)

我认为你正在引用这个Overview of Date Objects and Definitions of Abstract Operators,特别是第20.3.1.1节

  

Date对象包含一个数字,表示在一毫秒内的特定时刻。这样的数字称为时间值。时间值也可以是NaN,表示Date对象不代表特定的时刻。

这意味着对Date对象使用数学运算将提取其Number值以使其起作用。这就是+new Date()Math.floor(new Date())等语句返回数字的原因。

对于'' + new Date(),Date对象可能使用其toString()函数返回其String值。

相关问题