14

私は JavaScript に不慣れで、それについてもっと学びたいと思っています。

例えば:

a == true && alert("a is true");

これは次のようなものですか:

if(a == true)
{
    alert("a is true");
}

上記のコードが正しく、両方が等しい場合、このようなすべての演算子と条件を知りたいです。どこでそれらを見つけることができますか?

4

7 に答える 7

17

回答:アラートボックスである結果は同じになります。

説明:

trueほとんどの言語は、式の場合、最初の式が評価された場合にのみ2番目の式を評価するように設計されてい&&ます。

これは、、、、とa評価された場合false、空の文字列、、、またはが評価されず、アラートボックスが表示されないことを意味します。nullundefined0NaNalert("a is true")

JavaScriptには「真実」または「偽」の値があります。詳細については、 http://11heavens.com/falsy-and-truthy-in-javascriptを参照してください。

したがって、「同じ」の定義によって異なります。結果、つまりアラートボックスが表示されるかどうかは、同じです。


JavaScriptのさまざまな演算子とその仕組みについて詳しく知りたい場合は、developer.mozilla.org / en-US / docs / JavaScript / Guide/Expressions_and_Operatorsをチェックしてください。

于 2012-12-06T10:09:58.353 に答える
7

2 つの唯一の違いは、これが式であることです。

a == true && alert("a is true");

しかし、これは声明です:

if (a == true) {
    alert('a is true');
}

式の結果は、評価結果によって異なりa == trueます。

false && alert('a is true'); // false (and alert box does not show up)
true && alert('a is true');  // undefined (after alert box is clicked away)

これは、式を評価する際の「短絡」動作のおかげで機能します。を使用&&すると、偽の最初の条件が残りを評価せずに式の結果になります。

同様の種類の動作を持つ別の演算子は、論理 or||です。検討:

a || alert('a is false');

aこれは、が偽と評価された場合に警告ボックスを表示します。

false || alert('a is false'); // undefined (after alert box is clicked away)
true || alert('a is false');  // true (alert box does not show up)

このような副作用を伴う式は、「賢い」解決策と見なされることに注意してください。コードを短くすることはできますが、元の意図が常に明らかであるとは限りません。

とはいえ、これには次のような良い使い方もあります。

a = a || 'default value';

これにより、偽の場合はデフォルト値が割り当てられ、そうでない場合aは元の値が割り当てられaます。これらの表現は非常に頻繁に見られ、言語の強力な機能です。

于 2012-12-06T10:29:44.153 に答える
2

これは Javascript の特別な構文ではなく、コードを短くするための単なるトリックです。

魔法はありません。それは単なる単純な論理です。通常、このようなトリックは、コードを短縮するためにコード ミニマイザーによって使用されます。この動作は && と || に基づいています。演算子の重要なプロパティ - 最初の部分から結果が判明した場合、式の 2 番目の部分を評価しません (常に式の両方の部分を評価する & および | 演算子とは対照的です)。

使用方法の説明:

a==true && alert("a is true");

「a」が false の場合 - JavaScript エンジンは式全体も false でなければならないと分析します (「&&」(AND) 論理演算子の意味のため) - そして式の 2 番目の部分を省略します。式全体の結果を変更します。したがって、「アラート」は実行されません。反対に、'a' が true の場合 - Javascript エンジンは式の 2 番目の部分の結果を知る必要があり、'alert' を実行します。このような動作は、通常の「if」ステートメントを模倣しています。

a==false || alert("a is true");

これは「OR」論理演算子を使用しています。「a」が false の場合、式の 2 番目の部分を評価する必要はなく、「アラート」が発生します。「a」が true の場合、式の 2 番目の部分が「true」になり、式全体が「true」と評価される可能性があります。そのため、JavaScript エンジンは「アラート」を実行します。

さらに、これらのショートカットはさらに短縮できます。「a」はすでにブール値であるため、「a」と「true」の 2 つのブール値を比較する必要がないためです。それは次のようになります:

a && alert("a is true");

基本的に、そのようなものを手動で使用する必要はありません。通常の「if」ステートメントを使用するだけで、コードが読みやすくなります。その後、必要に応じて、コード ミニマイザーを使用して本番用のコードを短縮できます。

ハッピーコーディング!

于 2012-12-06T10:29:04.673 に答える
1

他の回答には、どのように機能するかという良い例がたくさんある&&ので、それらを繰り返すつもりはありません。いずれかの方法...

式が評価されると、戻り値が結果として送信されます。あなたの特定のケース(最初の例)では、戻り値はどこにも使用されず、結果は2番目の例と同じです。しかし、たとえば条件でその戻り値を使用するとif、少し紛らわしい結果が得られる可能性があります。次に例を示します。

var a = true;
if (a == true && alert('a = true')) {
    alert('a really is true');
} else {
    alert('It seems, that a is not true');
}

このコードニペットは最初に「a = true」と警告し、2 番目の警告は「a は true ではないようです」となります。これは、DOM ネイティブ関数の戻り値がalert()を返しundefined、条件が偽 ( true && undefined === false) になるためです。したがって、コードスニペットはその特定のコンテキストでは同等であると言えますが、他のコンテキストではそうではありません。

于 2012-12-06T12:06:09.180 に答える
0

どちらも同じことをします。最終的には、コードをどのように表示したいかによって異なりますが、ほとんどの場合 (私が思うに)、2 番目のバージョンを読むのが最適であることに同意するでしょう。

Ifステートメントが false (&& 演算子の場合) になると実行が停止するため、最初のステートメントは「if a が true の場合、アラートの場合...」と述べています。これは、a が true の場合にアラートが表示されることを意味します。

これは、2 番目のバージョンとまったく同じ結果です。

于 2012-12-06T10:11:15.677 に答える
0

2 つのコード セットは同じ結果をもたらしますが、同じではありません。

最初のコード セットの場合、

a == true && alert("a is true")

論理演算子&&が使用されます。

でステートメントを評価している間&&false && anythingは短絡評価されて false になります。

したがって、最初のステートメントで、alert(1)aが false の場合は呼び出されません。js コンパイラはalertステートメントをスキップします。

が真の場合a、条件が短絡していないため、alert(1) が実行されます。

2 番目のセットでは、通常のif状態が使用されます。このリンクを確認してください。

于 2012-12-06T10:30:17.703 に答える
-1

このコードは同じことを行い、a が true かどうかを確認してから関数 alert を呼び出します。同じと言えると思います。

于 2012-12-06T10:08:22.650 に答える