关于对象:Javascript ==运算符不能按预期工作?

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中,对象是不同的,即使它们包含相同的元素。每个单独创建的对象都是一个唯一的存储容器,因此==将返回false。

如果要查看两个对象是否包含相同的属性,则需要比较它们的每个属性。


如果您只需要比较数据,而不关心方法的差异,那么您可以使用JSON来深入比较两个形状相同的对象:

1
console.log( JSON.stringify(new field(2,flagF)) == JSON.stringify(new field(2,flagF)) );