18

JavaScript では、次のようなコードがあるとします。

var a = "one";
var b = q || a;
alert (b);

論理 OR 演算子は a の値を b に割り当て、アラートは「1」になります。

これは割り当てのみに限定されていますか、それともどこでも使用できますか?

空の文字列は未定義と同じように扱われるようです。これは正しいですか?

これは AND 変数でどのように機能しますか? それらの組み合わせはどうですか?

これらのイディオムを使用する場合、または使用しない場合の良い例は何ですか?

4

6 に答える 6

27

q || a評価するaqは、「偽」の値である必要があります。あなたがしたことは「短絡評価」と呼ばれます。

質問への回答:

  1. 論理演算子 ( and - &&、 or - など||) は、他の状況でも使用できます。より一般的には、 のような条件ステートメントでif詳細はこちら

  2. 空文字列は として扱われませんundefined。どちらも偽の値です。さらにいくつかの偽の値があります。詳細はこちら

  3. AND、または&&JavaScript では、変数ではありません。オペレーターです

  4. あなたが使ったイディオムはかなり一般的です。

    var x = val || 'default'; //is generally a replacement for

    var x = val ? val : 'default' //or

    if (val) var x = val; else var x = 'default';

于 2010-12-15T03:45:27.587 に答える
9

||Javascript で動作する方法は次のとおりです。

  1. 左のオペランドが として評価される場合、左のオペランドtrueを返します
  2. それ以外の場合は、右側のオペランドを返します

&& も同様に機能します。

これをインラインの存在チェックに利用できます。次に例を示します。

var foo = (obj && obj.property)

が定義されていて「真実」である場合に設定さfooれます。obj.propertyobj

于 2010-12-15T03:43:50.740 に答える
1

IMHO - ブール型の割り当てには使用しないでください。混乱する可能性があります。未定義として !== false、つまり false 自体が値です。

たとえば、そのフィールドが定義されている場合にのみ、オブジェクトからフィールド値をコピーしたい場合

var bar.value = false;
var foo = true;

var foo = bar.value || foo;  // ==> should be false as bar.value is defined

ブール型の割り当ての場合、実際に使用する必要があります

var foo = (bar.value !== undefined) ? bar.value : foo;
于 2011-09-13T15:11:51.283 に答える
1

この動作は、Perl などの他のスクリプト言語と共通です。論理 OR 演算子は、true と評価される最初の式に遭遇したときにオペランドの評価を停止するため、デフォルト値を指定するための構文上の省略表現として使用できます。 false でない場合は、それを割り当てます。そうでない場合は、2 番目のオペランドに対して繰り返します。

この動作を使用して、関数パラメーターのデフォルト値を指定することがよくあります。例えば

function myFunction(foo, bar) {
    var fooValue = foo || "a";

    // no need to test fooValue -- it's guaranteed to be defined at this point
}
于 2010-12-15T03:44:17.417 に答える
1

私はあなたの質問に従うかどうか確信が持てません。式を使用できる場所ならどこでも式を使用でき、2 つの式の論理演算子は式になります。

alert(q||a);
alert(true||false);

var x=5;
var y=0;
if (y!=0 && x/y>2) { /*do something*/ }

最後のビットは便利です。ほとんどの言語と同様に、Javascript は AND と OR を「短絡」します。AND の最初の部分が false の場合、2 番目のビットは評価されないため、0 による除算が不要になります。OR の最初の部分が true の場合、2 番目の部分は評価されません。

ただし、式を使用できる場所であればどこでもブール演算子を使用できます。

于 2010-12-15T03:45:56.637 に答える
1

Javascript はロジックを真偽で評価します。( false, "", null, undefined, 0, -0) などの値は、論理 false として評価されます。

これを遅延評価と組み合わせると、「OR」操作が評価されleft to right、見つかったら停止trueします。あなたの例では、真実性は文字通りブール値ではないため、値が返されます。

この場合:

x = 0; y = 5; alert(y || x)/*returns 5*/;  alert(x || y)/*also returns 5*/;

これは他のオブジェクトでもかまいません。

functionThatReturnsTrue() || functionThatDoesSomething();
于 2010-12-15T03:52:48.320 に答える