0

この質問をする前に2時間ほど検索しましたが、問題を解決するものは何も見つかりませんでしたが、それはかなり基本的なものだと思います. Java では、 equal() を使用して、2 つのオブジェクトの値が同じかどうかを確認できます。これが == 演算子が Javascript でどのように機能するかだと思いました。どうやらそうではありません。:(

== 演算子を使用して、独自に作成した 2 つのオブジェクトを比較しようとしましたが、すべての値が等しいにもかかわらず、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));

2 つのオブジェクトは同じはずなのに、これは false を返しますよね?

これが機能しない理由と、それを機能させる方法 (ゲームでこの比較が必要なため) を誰かが教えてくれたら、本当に感謝しています!

4

2 に答える 2

5

オブジェクトは同じ要素を含んでいても、JavaScript の頭の中では同じではありません。個別に作成された各オブジェクトは一意のストレージ コンテナーであるため、==false が返されます。

同じプロパティが含まれているかどうかを確認するには、2 つのオブジェクトの各プロパティを比較する必要があります。

于 2013-05-23T20:46:23.090 に答える
1

データを比較するだけで、メソッドの違いを気にしない場合は、単純に JSON を使用して、同じ形状の 2 つのオブジェクトを詳細に比較できます。

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