0

在问这个问题之前我搜索了大约 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,不是吗?

如果有人能告诉我为什么这不起作用以及如何使它起作用(因为我的游戏需要这种比较),我将非常感激!

4

2 回答 2

5

即使对象包含相同的元素,它们在 JavaScript 的头脑中也是不一样的。每个单独创建的对象都是一个唯一的存储容器,因此==将返回 false。

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

于 2013-05-23T20:46:23.090 回答
1

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

console.log( JSON.stringify(new field(2,flagF)) == JSON.stringify(new field(2,flagF)) );
于 2013-05-23T20:51:29.853 回答