Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按数字和字符串设置新日期()会得到不同的结果_Javascript - Fatal编程技术网

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 我相信这是因为它们

我正在学习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])会得到不同的结果,即使它们是相同的日期


请开导我

新建日期
返回一个对象。每次创建时,它都会创建一个不同的对象,因此它们不相等
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
,这将首先强制转换它们,然后您将得到一个值相等测试。

您误解了
==
=
之间的区别。这并不是说一个人做平等性检查,一个人做引用检查

对于
==
,两个