Get*_*ree 8 javascript comparison date-comparison value-of type-coercion
根据ECMA脚本标准,以下代码应返回true,但它不会:
d = new Date() ;
d.setTime(1436497200000) ;
alert( d == 1436497200000 ) ;
Run Code Online (Sandbox Code Playgroud)
第11.9.3节说:
- 如果Type(x)是String或Number而Type(y)是Object,则返回比较结果x == ToPrimitive(y).
然后,第8.12.8节说,ToPrimitive重新调整valueOf方法的结果.这意味着上面示例中的最后一行应该等效于:
alert( d.valueOf() == 1436497200000 );
Run Code Online (Sandbox Code Playgroud)
事实true确实如此.
为什么第一种情况不归true?
如果您查看8.12.8节中的规范,您会在该部分的末尾附近找到此文本:
当没有提示调用
[[DefaultValue]]内部方法时O,它的行为就像提示一样Number,除非O是一个Date对象(见15.9.6),在这种情况下它的行为就像提示一样String.
(强调我的)
现在,在步骤8/ 9中的摘要相等比较算法 [ 11.9.3 ],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不应该是一个大惊喜.;-)
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |