Javascript 为什么根据toString()的结果构建的日期与它们自己不同?
我有以下Javascript代码: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
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