Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.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_Jquery_Html - Fatal编程技术网

javascript中的日期不相等

javascript中的日期不相等,javascript,jquery,html,Javascript,Jquery,Html,我试图用javascript编写一些chrome控制台代码来实现日历,但我面临一个非常基本的问题 a=新日期2017年9月9日; //2017年10月9日星期一00:00:00 GMT+0530 IST b=新日期2017年9月9日; //2017年10月9日星期一00:00:00 GMT+0530 IST console.loga==b 您可以使用toString a、 toString===b.toStringgetTime返回一个数字,表示1970年1月1日00:00:00 UTC和给定

我试图用javascript编写一些chrome控制台代码来实现日历,但我面临一个非常基本的问题

a=新日期2017年9月9日; //2017年10月9日星期一00:00:00 GMT+0530 IST b=新日期2017年9月9日; //2017年10月9日星期一00:00:00 GMT+0530 IST console.loga==b 您可以使用toString

a、 toString===b.toString

getTime返回一个数字,表示1970年1月1日00:00:00 UTC和给定日期之间经过的毫秒数。所以用这个来确定两个日期是否相同


a、 getTime==b.getTime

JavaScript对于对象的值不相等。对象实际上是不是原始的一切。可以找到该列表。使用new关键字创建或可以创建的任何对象都是对象

对象相等由标识完成。这两个指针变量必须指向完全相同的内存地址,以便使相等按您期望的方式工作

基本体的相等性按值进行比较。正如其他答案所述,如果首先将其转换为基本字符串,则可以进行直接的值对值比较

a = new Date(2017, 9, 9)
b = new Date(2017, 9, 9)
a.toString() === b.toString()

旁注:字符串对象存在,但您必须使用新字符串显式声明它们。是的,这里的问题是a和b都是指向不同内存位置的指针,因为它们是日期对象而不是字符串,所以它们不相等。但是,您可以询问它们的toString版本是否相同,即使下面的说法不正确:

var obj1 = {};
var obj2 = {};
console.log(obj1 == obj2); // false; why? They refer different instances
使用==check时,日期对象通过引用进行比较,而不是通过其值进行比较

那么,使用这些操作符的出路是什么呢

将日期对象转换为支持==执行此检查的类型。可以通过将它们转换为字符串或数字表示来完成,其中==基于值而不是引用进行检查

下面是一个示例代码段,其中包含代码注释,以便进一步理解:

//物体 var obj1={}; var obj2={}; console.logobj1==obj2;//错误的为什么?它们引用不同的实例 obj2=obj1; console.logobj1==obj2;//符合事实的为什么?它们引用相同的“位置”/实例 //异常-例如字符串 var str1=`Hello`; var str2=`Hello`;
console.logstr1==str2;//符合事实的检查数字、字符串等类型的值而不是它们的内存引用,这是因为对象不同。知道两个日期在时间上完全相同有什么价值?在你把它们放在同一瞬间之前,2分钟在时间上有多接近?这听起来像是糟糕的设计。比较像这样的整数比比较像其他答案那样的字符串更有效。这也总是正确的,将日期转换为字符串并不能保留它工作的所有信息,但是为什么打印a.getTime会给出这样的结果:151025200000编辑:明白了。thanks@RitambharaChauhan因为这是1970年1月1日00:00:00 UTC和您创建的日期之间的毫秒数。您不应该使用toString来比较日期。toString函数不需要总是提供有关调用它们的对象的完整信息。例如,new Date100.toString==new Date101.toString为true,而new Date100.getTime==new Date101.getTime;是假的