6

実用的には、ここで探しているものに対する迅速で汚い答えがあります。しかし、なぜそれを使うのは良い考えではないのでしょうか? 正式なドキュメントが見つからないのはなぜですか? それは仕様と標準の一部ではありませんか?広く支持されていませんか?縮小すると、その構文を使用してコードが壊れる可能性があるという理由だけですか?

この機能のより包括的なドキュメントを教えていただければ幸いです。ifブロックの内容を定義するものは何ですか? インデントベースですか?だったら面白いですね。

if別の注意として、PHP のステートメントのこの構文に似たものはありますか? あちこちでそれらが使用されているのを見たことがあると断言できますが、手に負えない例は見つかりません. 私は気が狂っているだけで、実際にはPHPには存在しませんか、それともこれらのタイプのifブロックをPHPで使用できますか? そのようなブロックは、JS と PHP の両方で、同様にif持つことをサポートしていますか?else

単一行ベースの構文だけでなく、インデント ベースのものもあるようです。以下について教えていただけますか?

if(condition) do_some_statement();

ありがとう

4

5 に答える 5

9

しかし、なぜそれを使うのは良い考えではないのでしょうか?

維持するのが大変だからです。

正式なドキュメントが見つからないのはなぜですか? それは仕様と標準の一部ではありませんか?

もちろんそうです。§12.5 -ifステートメント§12 -仕様のステートメントを参照してください。an の本体はifStatementですステートメントの 1 つはブロック( §12.1 ) で、ステートメントのリストを 1 つのステートメントとして扱うことができますが、他にも多くの種類のステートメントがあります。

広く支持されていませんか?

普遍的に。

縮小すると、その構文を使用してコードが壊れる可能性があるという理由だけですか?

優れたミニファイヤは、その構文を壊しません。(実際、優れたミニファイヤはそれを利用します。)

if ブロックの内容を定義するものは何ですか? インデントベースですか?

ステートメントの本体は、ifそれに続くステートメントのみで構成され、インデントは JavaScript では意味がありません。したがって、これらはすべて同等です。

if (foo)
    bar();
charlie();

if (foo) bar();
charlie();

if (foo)
bar(); charlie();

    if (foo)
bar();
    charlie();

上記では、への呼び出しのみbarが条件付きfooです。charlie関係なく呼び出されます。

そのため、ブロック (ブロック、あなたは :-) と言うかもしれません) として扱われるステートメントのリストを導入するステートメントであるBlockを持っています:

if (foo) {
    bar();
}
charlie();

if (foo) { bar(); }
charlie();

if (foo) {
bar(); } charlie();

    if (foo)
{ bar(); }
    charlie();

ただし、インデントは人間にとって重要であるため、一貫したインデントを維持することをお勧めします。上記のそれぞれの最初の例は、(リストされているものの中で) 私たち単なる人間にとっておそらく最も明確です。:-)

if別の注意として、PHP のステートメントのこの構文に似たものはありますか?

私は大きな PHP ヘッドではありませんが、Control Structures -ifで定義されているように見えます。ありとなしの例があります{}。(ここでは説明しませんが、別の代替構文もあります。)

そのようなブロックは、JS と PHP の両方で、同様にif持つことをサポートしていますか?else

はい、ブロックの有無にかかわらずifサポートします。else

于 2012-07-27T12:43:37.370 に答える
3

javascript は空白を区別しません。つまり、

if(condition) do_some_statement();

と同じです

if(condition)
    do_some_statement();

そうは言っても、if ステートメントを変更する必要がある場合にバグが発生する可能性があるため、1 行の if ステートメントで中かっこを省略すると、常に眉をひそめられます。

if(condition)
    do_some_statement();
    // someone adds another line here, without adding the braces
    // now you've introduced a bug

また、書くのは本当に難しい{ }ですか?:P

于 2012-07-27T12:44:03.593 に答える
0

なぜそれを使うのは良い考えではないのですか?

if別のステートメントを追加して、パスした場合にのみ発火することを期待するのは簡単ではありません。

正式なドキュメントが見つからないのはなぜですか?

MDNドキュメント:

condition が true と評価された場合に実行されるステートメント。さらにネストされた if ステートメントを含む、任意のステートメントにすることができます。複数のステートメントを実行するには、ブロック ステートメント ({ ... }) を使用してそれらのステートメントをグループ化します。

ECMA-262 (89 ページ):

if (式) ステートメント

インデントベースのものがあるようです

いいえ。if、条件、ステートメントの順です。ステートメントは、同じ行または次の行にフォーマットできます。

JS では空白は重要ではありません。

于 2012-07-27T12:46:25.370 に答える
0

an に続くステートメントifはまさにそれです: a statement

ステートメントが取ることができる形式の 1 つは、中括弧で囲まれたステートメントのグループです。

したがって、ifステートメントの構文は次のとおりです。

if ( expression ) statement

したがって、ブレースが保守性を向上させる理由は、制御フロー効果の影響範囲に明示的な境界を提供するためです。if

于 2012-07-27T12:44:53.797 に答える
0

これは標準であり、仕様 ( if-statementその他のステートメント) の一部であり、どこでもサポートされています。JS では空白にセマンティクスがないため、ミニフィケーションはそれを壊しません。

そのため、広く使用されています (問題なし!)。中括弧を追加せずにインデントされた本文にステートメントを追加すると問題が発生する可能性があるため、悪いと見なされることがあります。また、ネストされた if で使用すると、不安定な動作につながる可能性があります。

if (false)
    if (whatever)
         ;
else
    alert("");

警告を期待していましたか? いいえ、elseは最後の に属しifます。

それでも、拡張されないことが確実な 1 行のステートメント ( return;.

于 2012-07-27T12:56:28.300 に答える