1

この質問への答えは明らかなようですが、私は常にセマンティクスを改善しようとしていますので、我慢してください。

X、Y座標を含む個々のアイテムを含む配列構造があります

var example = new Array();
example.push({x:0,y:0});

私のコードには、キャンバスを更新して特定の条件をチェックする間隔が設定されています。これに似たものを含む

if(example[0].x == other.x && example[0].y == other.y)
{
//do something
}

問題は、配列が非常に動的であり、コードが最初に実行されたとき、例の配列が空であるということです。したがって、Chromeは「プロパティxを取得できません」の行に沿ってエラーをスローします。コンソールをシャットダウンするために、配列{x: "〜"、y: "〜"}にダミーの項目を追加しましたが、実際には直感的ではないようです。望ましくないデータ構造を実装しましたか?...存在しないオブジェクトのifステートメントを処理する簡単な方法は何ですか?

4

3 に答える 3

4

配列に要素があるかどうかを確認してみませんか?

if (example.length && ...)

または、最初の要素が真であるかどうか:

if (example[0] && ...)
于 2012-11-26T05:45:02.410 に答える
2
if (0 in example
    && example[0].x == other.x && example[0].y == other.y) {
  // do something
}

(これは、melpomeneで示されているように0、配列が空でないかどうかを確認するだけの場合だけでなく、任意のインデックスに対して機能します。)example.length

于 2012-11-26T05:45:13.640 に答える
1

第1レベルの要素(つまり「example」)を確認できるはずです-JavaScriptは通常、nullまたは未定義の要素のプロパティにアクセスしようとすると、このようなエラーをスローします。他のいくつかがすでに示しているように:

if(example[0] && example[0].x === other.x)

重要なのは、JavaScriptを使用するとexample [0]を使用して好きなように返すことができるということですが、そのプロパティにアクセスしようとすると、運が悪くなります。

var example = [];
//undefined
example
//[]
example[0]
//undefined <--- this is a falsy value, will evaluate false in a check
example[0].x
//TypeError: Cannot read property 'x' of undefined
于 2012-11-26T05:49:40.453 に答える