次の行の目的と結果は何ですか?
var arr = arr || [];
変数「arr」を宣言し、その変数が「真」でない場合を除き、その値をすでに存在する別の変数(おそらく外部スコープ内)の値に設定します。その場合、「arr」は新しい空の配列を参照するように設定されます。 。
したがって、既存の「arr」の値が、、、、、、null
またはである場合0
、ローカルの「arr」は空の配列になります。それ以外の場合は、外側の「arr」と同じ値になります。false
""
undefined
あなたは通常このような状況でそれを見るでしょう:
var arr;
function whatever() {
var arr = arr || [];
...
}
時々人々はこれをします:
function questionable( arr ) {
var arr = arr || [];
その場合var
は不要です。
||
JavaScriptの演算子は、他のCのような言語のいとことは明らかに異なるため、これはすべて機能します。JavaScriptでは、||
式の値はブール値である必要はありません。代わりに、左側のオペランドまたは右側のオペランドのいずれかの値です。値を調べて「真実」であるかどうかを判断しますが、そのブール値の強制は内部的なものです。左側が「真実」の場合、||
式の値はその値です。それ以外の場合は、右側の値です。左側が「真実」である場合、右側はまったく評価されません。
ifisfalsyのnew
インスタンスをインスタンス化します。Array
arr
C#では、このパターンは「null合体演算」と呼ばれます。C#に精通している場合は、次のようなことを行います。
string foo = bar ?? String.Empty
基本的にJavascriptや他の言語(たとえばPerlなど)では、||
は短絡演算子としてよく使用されます。他の5つの変数のいずれか最初に定義された値のいずれかの値を割り当てる必要がある変数がある場合は、次のように試すことができます。
a = b || c || d || e || f;
これは評価しb
ます。その値がtrue
、の場合、a
が割り当てられb
、それだけです。b
がであることが判明した場合false
、検索はに伝播しc
ます。多くの場合、新しい値を割り当てるかどうかを確認するために、変数をそれ自体と比較する必要があります。これが何をするかa = a || b
です。もしそれがPerlだったら、あなたはそれをに短縮することができたでしょうa ||= b
。