根据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
不应让人感到惊讶。 ;-)