2

私はどこかでこのコードスニペットを見ました:

var idx = SOME_VALUE;

var color = {
  yellor: 1,
  red: 2,
  black: 0
};

var x = color[idx] || []; // Is this means if color[idx] is null, then return an empty array?

var x = color[idx] || [];コードがnullの場合color[idx]は、空の配列をxに返し、それ以外の場合はx =color[idx]を意味すると推測できます。私は正しいですか?

それでも、説明が必要です。このコードは次と同じロジックを持っていますか?

CONDITION==VALUE? TRUE_goes_here : FALSE_goes_here
4

5 に答える 5

4

つまり、color[idx]が「偽」の場合は、代わりに空の配列を使用してください。「偽の」値はfalse(もちろん) 、、、、、、および(他0のすべてNaNの値は「真実」です)です。そのイディオムは、JavaScriptの不思議なほど強力な演算子*の例です。""undefinednull||

この場合、にcolor含まれる名前のプロパティが含まれていない場合はデフォルト値が提供されidxます(そのようなオブジェクトにインデックスを付け、キーが既存のプロパティ名と一致しない場合、結果はundefined):xになります。1idx「yellor」の2場合)、(idx「red」の0場合)、(idx「black」の場合)、または[]それidx以外の場合。

ですから、質問の最後に質問に答えることは、基本的にはそうです。これは:

var x = color[idx];
if (!x) {
    x = [];
}

また

var x = color[idx] ? color[idx] : [];

* (それは私の貧血の小さなブログへの投稿です。)

于 2011-04-18T17:11:52.947 に答える
1

あなたは正しいです。

Javascriptではa || b、最初の「真の」オペランドに評価されます。が「偽」の
場合(たとえば、、、、 ) 、と評価されます。anullfalseundefined0b

于 2011-04-18T17:12:30.943 に答える
0

or演算子は、 conditionall (likeまたはdo)||として評価されない最初の値を提供します。false0null

これは、使用0 || null || 5すると結果として5が得られることを意味します。

そのコードにあるのは、||変数の初期化時に演算子を使用してデフォルト値を指定するJavaScriptの一般的な方法です。それはただ

var x = something || default_value;

より少し読みやすいです

var x = (something ? something : default_value);
于 2011-04-18T17:15:00.803 に答える
0
var x = color[idx] || [];

color名前がであるプロパティを持つオブジェクトであり、そのString(idx)プロパティの値が真である場合、そのプロパティの値をに割り当てますx。それ以外の場合はx、空の配列にします。

于 2011-04-18T17:15:19.297 に答える
0

この場合、||は「ブール値または」演算子です。多くの言語と同様に、JavaScriptのブール演算子は短絡されています。たとえば、次のブール式があるとします。

var booleanValue = someFunction() || otherFunction()

最初の関数の戻り値がtrueと同等の場合、2番目の値を評価する必要はなくotherFunction()、「or」演算子は、操作の一部がtrueと同等であるかどうかに関係なく、trueと同等の値を返すため実行されません。これは、コードをより効率的にするために適しています。必要な式のみが評価されます。

また、この場合は奇妙な動作があります。式の最初の値はtrueと同等であるため、JavaScriptは式の結果としてそれを返すだけです。これは、式全体がとにかくtrueであることを意味するためです。

コードでは、の値color[idx]はtrueに設定されている場合はtrueと同等です。「or」演算では真に相当する値であるため、式の値として返されます。ただし、設定されていない場合は、undefinedが返されます。これは誤った等価値です。したがって、JavaScriptは次の値を評価して、「or」式が真であるかどうかを定義する必要があります。次の値は最後の値であり、式の値は完全にそれに依存しているため、最初の値が誤って等価である場合、式は次の値を返します。

于 2011-04-18T17:23:15.183 に答える