初心者なので拙い文章ですいませんm(_ _)m
JavaScriptでifの中にifを入れる場合、中に入れるif、else ifの数に制限などはあるのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/13 23:09 編集
2018/06/14 00:12
2018/06/14 00:23 編集
2018/06/14 12:42

回答7件
0
ベストアンサー
JavaScriptでifの中にifを入れる場合、中に入れるif、else ifの数に制限などはあるのでしょうか?
技術的制約はありませんが、可読性の観点から深いネストは敬遠されます。
Re: unix-yuto さん
投稿2018/06/13 23:20
総合スコア18194
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/14 00:28
2018/06/14 00:37

0
js
1var i = 0 2if (++i) 3if (++i) 4if (++i) 5//... 6if (++i) 1; 7console.log(i);
試してみたところ、当方の環境(win7、Firefox60)ですと、3010を超えるとスタックが溢れてエラーになりました。
また、
js
1var i = 0 2if (++i) 3if (++i) 4if (++i) 5//... 6if ( (++i) ) 1; 7console.log(i);
としてみたところ、3010でもエラーになりましたので、if文以外のスタックやその他メモリの状況に左右されるかと思います。
投稿2018/06/14 09:28
総合スコア37437
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
あまり意識していない方も多いですがjavascriptにはelseifという構文がありませんので
常に真偽のどちらかの判定しかしていません。
「else if」は実際には「else{if(){ ・・・}}」というelseのブロックの中でifを
ネストしているにすぎません。
なので論理的にはネストを気にするのはあまり意味がなく、あくまでも見た目上のネストだけ
気にしたほうがいいという認識がよいと思います
投稿2018/06/14 01:11
編集2018/06/14 01:32総合スコア117707
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/14 01:21
2018/06/14 12:51 編集

0
まず、最近のコンピュータは性能が高いので、何か上限があったとしても実用上問題が起こることはまずありません。
その上で、原理的に上限がありうるかという点について考えます。
if文のネスト(入れ子)ですが、単純に考えると、内部的にそのようなものは存在しません。
if文の開始部分が「条件判定し、満たされないなら、if文の終了地点へ飛ぶ(goto)」という動作で、if文の終了地点には何もありません。
なのでif文にネストになるような構造はそもそも無いのです。
ただ、スコープを切り替えたり何らかの最適化のためにif文のネストが何らかの意味を持つことも考えられます。
その場合であっても、JavaScriptが動くレベルのCPUなら、固定のスタックを食いつぶしてメモリ全体の制限より早く限界が来るみたいなことはないのではないかと思います。
【追記】
上記のように考えていたわけですが3000程度で上限に達するとは予想外でした。すみません。
私も試してみましたが数は違うもののどのブラウザでも(Firefox,Chrome,IE,Edge)千や万単位でメモリ不足や再帰の上限でエラーになりました。
この程度のネスト数でメモリ不足になる理由は私には分かりません。
投稿2018/06/14 01:22
編集2018/06/16 19:03総合スコア3047
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/14 01:38

0
試してみてはいかがでしょうか。
動くサンプル:https://jsfiddle.net/eb23wszf/
【Chrome DevToolsを使いこなそう! Web開発に必須なブラウザ開発ツールによるデバッグの基本 - エンジニアHub|若手Webエンジニアのキャリアを考える!】
https://employment.en-japan.com/engineerhub/entry/2017/05/30/110000#Consoleパネル
投稿2018/06/13 22:59
総合スコア69625
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ifやelseの数や制限については、他の方が答えてらっしゃるので、別角度から。
else if を複数以上使う場合、switch構文の方が、よかったりします。
例えば下記のようなパターン
変数juiceに、なんのジュースが入ってるかを判別する時とかです。
javascript
1var juice = 'オレンジ' 2// ↑ここでは決め打ちですが、juiceに何が入ってるかわからないとします。 3 4switch(juice){ 5 case 'オレンジ': 6 console.log('うーまいー!'); 7 break; 8 case '抹茶': 9 console.log('苦い・・・'); 10 break; 11 case 'レッドブル': 12 console.log('飲みすぎないように'); 13 break; 14 default: 15 console.log('なんだこれ?'); 16 break; 17}
あと、ifが一行で値だけが変化するって時は三項演算子を使うと、ネストが抑えられるかと思います。
javascript
1var hogehoge = true 2// ↑trueかfalseが入ってる変数とします。 3 4var message = hogehoge ? 'ほげほげいるよ' : 'ほげほげいない!'; 5// hogehogeがtrueだと左側、falseだと右側を使います。 6 7if (message.indexOf('いない') != -1) { 8 // messageに”いない”って文字列が入ってると、下記が実行されます 9 console.log('いないらしい・・・'); 10 return false; 11} 12 13
ちょっと、質問と趣旨が変わってしまってすみませんが、
switch構文や、三項演算子をうまく使えば、else ifも、ifのネストもけっこう抑えられるかと思います。
お役に立てられれば幸いです。
投稿2018/06/14 00:58
総合スコア9555
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。