我正在尝试使用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
这是我犯的一些愚蠢的错误,但似乎无法找到,请帮忙吗?
答案 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()