Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.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 为什么根据toString()的结果构建的日期与它们自己不同?_Javascript - Fatal编程技术网

Javascript 为什么根据toString()的结果构建的日期与它们自己不同?

Javascript 为什么根据toString()的结果构建的日期与它们自己不同?,javascript,Javascript,我有以下Javascript代码: var date1 = new Date(); var date2 = new Date(date1.toString()); console.log(date1 === date2); //false console.log(date1); //Fri Oct 30 2015 16:55:56 GMT+0200 (GTB Standard Time) console.log(date2); //Fri Oct 30 2015 16:55:56 GMT+020

我有以下Javascript代码:

var date1 = new Date();
var date2 = new Date(date1.toString());
console.log(date1 === date2); //false
console.log(date1); //Fri Oct 30 2015 16:55:56 GMT+0200 (GTB Standard Time)
console.log(date2); //Fri Oct 30 2015 16:55:56 GMT+0200 (GTB Standard Time)
console.log(date1 == date2); //false
console.log(date2 - date1); // -213
我希望
date2
类似于
date1
,因为
date2
是从
date1
toString()的
字符串创建的
Date
。为什么不是这样

它们是两个具有不同身份的对象,即使它们具有相同的值。要比较日期是否相等,请将其转换为数字时间戳:

date1.getTime() == date2.getTime()
date1.valueOf() == date2.valueOf()
+date1 == +date2
Number(date1) == Number(date2)

toString()
忽略毫秒部分。试着用字符串来代替。或者只使用整数时间戳进行序列化。

这与本例基本相同

var a = { name: "Mikey" };
var b = { name: "Mikey" };

a === b //false
但您可以比较基本体:

var a = 1; 
var b = 1;

a === b //true

date1===date2
将始终失败,因为它们是不同的对象。这里可能有浮点错误。因此,如果我将date1转换为字符串并将其转换回日期,那么它要么相同,要么更旧,最多999毫秒?@LajosArpad:正确。谢谢你,Bergi的回答,这充分解释了经验丰富的行为。
var a = { name: "Mikey" };
var b = { name: "Mikey" };

a === b //false
var a = 1; 
var b = 1;

a === b //true