日期不等于javascript

时间:2017-10-25 18:13:14

标签: javascript jquery html

我正在尝试使用Chrome控制台编码来实现javascript中的日历,但我面临着一个非常基本的问题。



a = new Date(2017, 9, 9);
// Mon Oct 09 2017 00:00:00 GMT+0530 (IST)
b = new Date(2017, 9, 9);
// Mon Oct 09 2017 00:00:00 GMT+0530 (IST)
console.log(a == b);




但他们并不等同于:

a == b 
false

这是我犯的一些愚蠢的错误,但似乎无法找到,请帮忙吗?

5 个答案:

答案 0 :(得分:5)

getTime()返回一个数字,表示1970年1月1日00:00:00 UTC与给定日期之间经过的毫秒数。因此,使用它来确定两个日期是否相同。

a.getTime() === b.getTime()

答案 1 :(得分:1)

这里的问题是a和b都是指向不同内存位置的指针,因为它们是日期对象而不是字符串,所以它们不相等。但是你可以询问它们的toString()版本是否相等

答案 2 :(得分:1)

首先,即使以下情况也是如此:

var obj1 = {};
var obj2 = {};
console.log(obj1 == obj2); // false; why? They refer different instances
使用Date检查时,

==个对象通过引用进行比较,而不是通过它们的值进行比较。

那么,使用这些运算符的方法是什么?

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

以下是一个示例代码段,其中包含可进一步了解的代码注释:

// Objects
var obj1 = {};
var obj2 = {};
console.log(obj1 == obj2); // false; why? They refer different instances

obj2 = obj1;
console.log(obj1 == obj2); // true; why? They refer the same `location` / instance

// Exceptions - String for example
var str1 = `Hello`;
var str2 = `Hello`;
console.log(str1 == str2); // true; Types like number, string are checked for values not for their memory reference

答案 3 :(得分:0)

您可以使用toString

a.toString() === b.toString()

答案 4 :(得分:0)

JavaScript没有对象的值相等。对象实际上是一些不是原始的东西。该列表可以找到here。使用alter table productsArchive add constraint unq_productsArchive_item_pack_weight unique(item, pack, weight); 关键字创建(或可以)创建的任何内容都是对象。

对象相等是通过身份完成的。两个指针(变量)必须指向完全相同的内存地址,以便使等式按照您期望的方式工作。

原语的平等性按价值进行比较。正如另一个答案所述,如果首先将其转换为原始create index idx_unq_packageArchive_item_pack_weight on packageArchive(item, pack, weight); alter table productsArchive add constraint fk_productsArchive_item_pack_weight foreign key (item, pack, weight) references packageArchive(item, pack, weight); ,则可以进行直接的值 - 值比较。

new

附注:string个对象存在,但您必须使用a = new Date(2017, 9, 9) b = new Date(2017, 9, 9) a.toString() === b.toString()

明确声明它们