Javascript == operator doesn't work as expected?
本问题已经有最佳答案,请猛点这里访问。
我找了两个小时才问这个问题,虽然我觉得这是一个相当基本的问题,但没有找到任何解决我问题的方法。在Java中,您可以使用等号()来查看两个对象是否具有相同的值。我认为这就是==操作符在JavaScript中的工作方式。表面上它没有。:(
我一直试图用==运算符比较两个自己创建的对象,但它返回false,尽管所有值都相等。为什么?
这是我用来创建字段对象的函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | 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,不是吗?
如果有人能告诉我为什么这不起作用,以及如何让它起作用(因为我的游戏需要这个比较),我会非常感谢!
在javascript中,对象是不同的,即使它们包含相同的元素。每个单独创建的对象都是一个唯一的存储容器,因此
如果要查看两个对象是否包含相同的属性,则需要比较它们的每个属性。
如果您只需要比较数据,而不关心方法的差异,那么您可以使用JSON来深入比较两个形状相同的对象:
1 | console.log( JSON.stringify(new field(2,flagF)) == JSON.stringify(new field(2,flagF)) ); |