为什么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源代码的实现?
编辑:我不是在寻找预期结果的解决方案。我想在规范中找到文档。
答案 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值。