我在问这个问题前2个小时进行了搜索,虽然我认为这是一个相当基本的问题,但没有找到解决问题的方法。在Java中,您可以使用equal()来查看两个对象是否具有相同的值。我认为这是==运算符在Javascript中的工作方式。显然它没有。 :(
我一直在尝试使用==运算符比较两个自己创建的对象,但它返回false,尽管所有值都相等。为什么呢?
这是我创建我使用的字段对象的函数:
function field(player, figureKind) {
this.player = player;
this.figureKind = figureKind;
this.hidden = true;
if (player == 1 && hidden && figureKind != trapF && figureKind != flagF) {
this.image = figureKind.getImage(0);
} else if (player != 1 && hidden) {
this.image = hidden;
} else {
this.image = figureKind.getImage(player);
}
this.setKind = setKind;
function setKind(figureKind) {
this.figureKind = figureKind;
this.image = figureKind.getImage(player);
}
this.getKind = getKind;
function getKind() {
return this.figureKind;
}
this.getImage = getImage;
function getImage() {
return this.image;
}
this.getPlayer = getPlayer;
function getPlayer() {
return this.player;
}
this.removeHidden = removeHidden;
function removeHidden() {
this.hidden = false;
this.image = figureKind.getImage(player);
if (figureKind == trapF)
this.image = figureKind.getImage(1);
}
}
console.log(new field(2,flagF) == new field(2,flagF));
虽然两个对象应该相同,但是返回false,不是吗?
如果有人能告诉我为什么这不起作用以及如何让它发挥作用(因为我需要对比我的比赛)我真的很感激!
答案 0 :(得分:5)
即使它们包含相同的元素,JavaScript中的对象也不尽相同。每个单独创建的对象都是唯一的存储容器,因此==
将返回false。
如果要查看它们是否包含相同的属性,则需要比较两个对象的每个属性。
答案 1 :(得分:1)
如果您只需要比较数据,而不关心方法的差异,您可以简单地使用JSON深度比较两个相同形状的对象:
console.log( JSON.stringify(new field(2,flagF)) == JSON.stringify(new field(2,flagF)) );