Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
意外的Javascript日期对象隐式转换_Javascript_Date_Implicit Conversion - Fatal编程技术网

意外的Javascript日期对象隐式转换

意外的Javascript日期对象隐式转换,javascript,date,implicit-conversion,Javascript,Date,Implicit Conversion,为什么Javascript的日期对象为隐式转换返回不同的值 数字转换: +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 字符串转换: +new Date() // returns 1456293356618 as expected ''

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

数字转换:

+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 
字符串转换:

+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源代码的实现


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

我想您是指这一部分,特别是第20.3.1.1节

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

这意味着对日期对象使用数学运算将提取其数字值以起作用。这就是为什么像+new Date和Math.floornew Date这样的语句会返回一个数字

至于+new Date,Date对象可能使用其toString函数返回其字符串值。

运算符重载。在:

+new Date()
它被视为,并强制值为Number。在:

'' + new Date() // note one value is a string
它被视为字符串,并将值强制为字符串。在:

5 + 6   // note both values are number
它被视为最重要的。由于值是数字,因此不需要强制


请注意,+是添加还是连接取决于值,并在。

++新日期ECMAScript规范在线免费提供中进行了描述。为什么您关心V8的源代码?它只是在做所有JS引擎应该做的事情。@Rayon我没有要求解决方案,我知道如何获得期望值。请再读一遍这个问题,如果你同意,请投反对票wish@nnnnnn您的示例没有解释为什么is+new Date不能按预期工作,因为规范要求这样做。您是否在问为什么语言/规范的创建者希望它以这种方式工作?我想答案是这样做是有意义的,因为通常你会把一些东西转换成字符串,让用户阅读。但是你不能在人类可读的日期字符串上做数学运算,所以…@nnnnnn我已经阅读了规范,也许我找不到它,我在这里问,如果你在这里分享它而不是下载谢谢,但是我仍然找不到在描述+新日期行为的规范中提到使用toString而不是valueOf的内容!请注意,参考是ES5,这是正常的,因为行为没有改变,但它不是ECMA-262的最新版本。+是否进行加法或串联的参考在规范中是相同的位置。谢谢,这不是很容易找到。现在我可以用它来模拟这个操作符。