根据ECMA脚本标准,以下代码应返回true,但不是:

d = new Date() ;
d.setTime(1436497200000) ;
alert( d == 1436497200000 ) ;

11.9.3部分说:



然后,8.12.8节说ToPrimitive重新调整了valueOf方法的结果。这意味着我上面的示例中的最后一行应等效于:
alert( d.valueOf() == 1436497200000 );

确实返回true

为什么第一种情况不返回true

最佳答案

如果您查看8.12.8部分的规范,则会在该部分结尾处找到以下文本:



(强调我的)

现在,在“抽象平等比较算法” [11.9.3]的步骤8 / 9中,在没有ToPrimitive(x)参数的情况下调用ToPrimitive(y)hint

缺少此hint参数以及上面的文本,意味着ToPrimitive方法在日期对象上返回toString()值。

您可能已经知道,(new Date()).toString()以美式英语[source]返回日期的字符串表示形式:"Wed Jul 01 2015 22:08:41 GMT+0200 (W. Europe Daylight Time)"
像这样的字符串不等于1436497200000不应让人感到惊讶。 ;-)

08-17 06:16