Javascript 按数字和字符串设置新日期()会得到不同的结果
我正在学习JavaScript,我发现JavaScript有奇怪的(?)行为 我通过创建日期对象Javascript 按数字和字符串设置新日期()会得到不同的结果,javascript,Javascript,我正在学习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 = 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])会得到不同的结果,即使它们是相同的日期
请开导我
新建日期
返回一个对象。每次创建时,它都会创建一个不同的对象,因此它们不相等getTime
从对象返回一个值(属性)——这对于两个对象都是相同的。new Date
返回一个对象。每次创建时,它都会创建一个不同的对象,因此它们不相等getTime
从对象返回一个值(属性)——这对于两个对象都是相同的。new Date
返回一个对象。每次创建时,它都会创建一个不同的对象,因此它们不相等getTime
从对象返回一个值(属性)——这对于两个对象都是相同的。new Date
返回一个对象。每次创建时,它都会创建一个不同的对象,因此它们不相等getTime
从对象返回一个值(属性)——这对两个对象都是一样的。这有点复杂<代码>=检查类型,而=
尝试转换为普通类型。这就是为什么1=='1'
为真,而1=='1'
为假的原因,因为在第一种情况下,“1”被转换为数字(AFAIR)
您可以在这里看到具体的规范是如何处理的:-在本例中,您感兴趣的部分是1。f
如果x和y引用同一对象,则返回true。否则,返回false
这有点复杂<代码>=检查类型,而
=
尝试转换为普通类型。这就是为什么1=='1'
为真,而1=='1'
为假的原因,因为在第一种情况下,“1”被转换为数字(AFAIR)
您可以在这里看到具体的规范是如何处理的:-在本例中,您感兴趣的部分是1。f
如果x和y引用同一对象,则返回true。否则,返回false
这有点复杂<代码>=检查类型,而
=
尝试转换为普通类型。这就是为什么1=='1'
为真,而1=='1'
为假的原因,因为在第一种情况下,“1”被转换为数字(AFAIR)
您可以在这里看到具体的规范是如何处理的:-在本例中,您感兴趣的部分是1。f
如果x和y引用同一对象,则返回true。否则,返回false
这有点复杂<代码>=检查类型,而
=
尝试转换为普通类型。这就是为什么1=='1'
为真,而1=='1'
为假的原因,因为在第一种情况下,“1”被转换为数字(AFAIR)
您可以在这里看到具体的规范是如何处理的:-在本例中,您感兴趣的部分是1。f
如果x和y引用同一对象,则返回true。否则,返回false
你误解了
=
和==
之间的区别。这并不是说一个人做平等性检查,一个人做引用检查
对于==
,两个操作数必须具有相同的类型。但是对于==
,在检查是否相等之前允许类型强制
在您的例子中,这两个对象的类型相同,因此=
和===
之间没有区别;但他们检查的是引用相等性,而不是值。检查值是否与日期相等的正确方法如下:检查stack.getTime()==overflow.getTime()
您还可以执行
+stack==+overflow
,这将首先强制转换它们,然后您将得到一个值相等测试。您误解了==
和=
之间的区别。这并不是说一个人做平等性检查,一个人做引用检查
对于==
,两个操作数必须具有相同的类型。但是对于==
,在检查是否相等之前允许类型强制
在您的例子中,这两个对象的类型相同,因此=
和===
之间没有区别;但他们检查的是引用相等性,而不是值。检查值是否与日期相等的正确方法如下:检查stack.getTime()==overflow.getTime()
您还可以执行
+stack==+overflow
,这将首先强制转换它们,然后您将得到一个值相等测试。您误解了==
和=
之间的区别。这并不是说一个人做平等性检查,一个人做引用检查
对于==
,两个操作数必须具有相同的类型。但是对于==
,在检查是否相等之前允许类型强制
在您的例子中,这两个对象的类型相同,因此=
和===
之间没有区别;但他们检查的是引用相等性,而不是值。检查值是否与日期相等的正确方法如下:检查stack.getTime()==overflow.getTime()
您还可以执行
+stack==+overflow
,这将首先强制转换它们,然后您将得到一个值相等测试。您误解了==
和=
之间的区别。这并不是说一个人做平等性检查,一个人做引用检查
对于==
,两个