質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
CoffeeScript

CoffeeScriptはプログラミング言語です。シンタックスシュガーの導入により、JavaScriptのコードに変換された後動作します。JavaScriptに比べ、可読性と簡潔性が向上しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

3824閲覧

javascript コレクションが存在するかどうかチェック。

退会済みユーザー

退会済みユーザー

総合スコア0

CoffeeScript

CoffeeScriptはプログラミング言語です。シンタックスシュガーの導入により、JavaScriptのコードに変換された後動作します。JavaScriptに比べ、可読性と簡潔性が向上しています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2016/08/21 08:16

現在マス目を使うゲームを制作していて、あるマスを中心として(centerCell= table.rows[l].cells[m])周りのマス目のクラスをチェックするという処理をさせようとしています。
テーブルを使って生成していて、
例えば左下のマスをcell_1 = table.rows[l+1].cells[m-1]としています。しかし、左下にマスが存在しないマスもあるので、そのような場合に、「Cannot read property 'cells' of undefined」というようなエラーが出てしまいます。
このような場合は無視していけば良いと思い、try~catch文を用いましたが、挙動がどうしてもおかしくなるため、別の方法をとることにし、

coffeescript

1if table.hasOwnProperty('rows[l+1]') and table.hasOwnProperty('cells[m]')

としてみましたが、反応せず、調べたところ、.rowsや.cellsはプロパティーではなくコレクション?のようでした。

コレクションの存否を判定するような方法をアドバイスいただけないでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

エラーメッセージをよく読んで下さい。

Cannot read property 'cells' of undefined

undefined の cells プロパティを読めません

cell_1 = table.rows[l+1].cells[m-1]

table要素ノードは rows プロパティを持っていませんので、table.rows === undefined になります。
undefined はプロパティを持てませんので、cells プロパティは参照不可能なのです。

table要素ノードは thead, tbody, tfoot を子に持てるので、どの要素ノードを参照するのかを確認して下さい。
一つ目のtbody要素配下のtr要素ノード群は次のコードで参照可能です。

JavaScript

1var rows = table.tBodies[0].rows;

rows に指定可能なインデックス値が length 以上になる事はないので 、「0 以上 length 未満のインデックス値」を指定すれば良いでしょう。

JavaScript

1for (var i = 0, l = rows.length; i < l; ++i) { 2 console.log(rows[i]); 3}

Re: saiiii さん

投稿2016/08/21 12:37

think49

総合スコア18162

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/08/22 06:39

ありがとうございました。 いただいた回答をヒントに無事解決することができました。
guest

0

?.演算子でメソッド呼びするようにして?演算子で存在確認すればいいと思います。

CoffeeScript

1centerCell = table.rows[l]?.cells[m] 2if centerCell? 3 console.log centerCell

投稿2016/08/21 08:43

raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/08/22 06:40

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問