我正在学习JavaScript,我发现了JavaScript的奇怪(?)行为。
我按
创建日期对象var stack = new Date(1404187200000) // 07-01-2014
var overflow = new Date('07-01-2014')
当我比较那两个日期对象时
stack == overflow // returns false
stack.getTime() == overflow.getTime() // returns true
我相信它是因为它们不是同一个对象。但我知道' =='比较平等和' ==='是身份的比较 - 就像这个例子:
var stack = 1;
var overflow = '1';
stack == overflow // returns true
stack === overflow // returns false
那么,为什么比较新日期([NUMBER])和新日期([STRING])会给出不同的结果,即使它们是相同的日期?< / p>
请赐教!
答案 0 :(得分:1)
new Date
返回一个对象。每次创建它都会创建一个不同的对象,因此它们并不相同。 getTime
从对象返回一个值(属性) - 对于两个对象都是相同的。
答案 1 :(得分:1)
这有点复杂。 ===
在==
尝试转换为常见类型时检查类型。这就是为什么1 == '1'
为真但1 === '1'
为假的原因,因为在第一种情况下&#39; 1&#39;变换为数字(AFAIR)。
你可以在这里看到确切的说明如何处理:http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3 - 在这种情况下你的有趣部分是1. f。
如果x和y引用同一个对象,则返回true。否则,返回false。
答案 2 :(得分:1)
您误解了==
和===
之间的区别。不是那个人进行了等式检查,而是进行了检查。
对于===
,两个操作数必须具有相同的类型。但是对于==
,在检查相等性之前允许输入强制类型。
在您的情况下,两个对象属于同一类型,因此==
和===
之间没有区别;但他们正在检查参考平等,而不是价值。检查与日期的值相等的正确方法就像您正在做的那样:检查stack.getTime() == overflow.getTime()
。
您也可以执行+stack == +overflow
,这将首先投射它们,然后您将获得值相等测试。