インデックスをデクリメントせずに (変数の値を変更せずに) 1 (または任意の数値) を減算するにはどうすればよいですか?
これが私のコードのスニペットです:
if (i > 0 & areaImages[i].id == areaImages[i-1].id)
そして、Firebug から次のエラー メッセージが表示されます。
TypeError: areaImages[i - 1] is undefined
インデックスをデクリメントせずに (変数の値を変更せずに) 1 (または任意の数値) を減算するにはどうすればよいですか?
これが私のコードのスニペットです:
if (i > 0 & areaImages[i].id == areaImages[i-1].id)
そして、Firebug から次のエラー メッセージが表示されます。
TypeError: areaImages[i - 1] is undefined
何も減りません。実際の理由は、間違った演算子を使用したことです。
if (i > 0 && areaImages[i].id == areaImages[i-1].id)
// ^^
ブール値の場合、&
との両方&&
が同じ (最大==
) の結果を返します。しかし、決定的な違いは、&&
がショートサーキットであることです。つまり、 の左側が の場合&&
、false
右側は評価されません。
元のコードの問題点はショートサーキットで&
はないareaImages[i-1].id
ので、 であっても評価されi <= 0
ます。しかしi-1
、無効なインデックスであるためareaImages[i-1]
未定義であり、未定義からプロパティを取得できず、TypeError が発生します。