Javascript ==运算符不能按预期工作?

时间:2013-05-23 20:44:37

标签: javascript object equals

我在问这个问题前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,不是吗?

如果有人能告诉我为什么这不起作用以及如何让它发挥作用(因为我需要对比我的比赛)我真的很感激!

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:1)

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

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