私はちょうど私の中心的なJavaScriptの知識を増やしたいと思います。javascriptでこれは何ですか: "var var1 = var1 || []"
は時々私はこの文を参照してくださいが、私はそれが何をするか分からない:
var var1 = var1 || [];
それは意味および/またはのために何が、どのようにあなたがそれを使うのですんか?
ありがとうございます。
私はちょうど私の中心的なJavaScriptの知識を増やしたいと思います。javascriptでこれは何ですか: "var var1 = var1 || []"
は時々私はこの文を参照してくださいが、私はそれが何をするか分からない:
var var1 = var1 || [];
それは意味および/またはのために何が、どのようにあなたがそれを使うのですんか?
ありがとうございます。
JavaScriptの論理演算子は実際には2つのオブジェクトの1つに評価されます。 a || b
を使用した場合、は、a
がfalseの場合はb
、それ以外の場合はa
になります。a
がtrueの場合は、b
と評価されます。したがって、a
がtrueの場合はa || []
がa
、a
の場合は[]
がfalseのいずれかの値になります。
それは、これは私は、次の2つのカウンタを提示し、「愚かな声明ている」と指摘されてきたがif (!a) { a = [] };
偽ではなく、むしろ「偽物」です。違いは微妙ですが重要です。 JavaScriptの偽値は、0、null、false、空の文字列、未定義、またはNaNです。 'null || 5 'は 'null!= false'でも' 5 'を返します。 –
||
オペレータは、「真実」であるオペランドの最初のものを評価します。
[]
は空の配列です。 ([ "Hi!" ]
は1つの文字列の配列です)
したがって、式x || []
は、「真実」の場合はx
、それ以外の場合は空の配列と評価されます。
これにより、var1
パラメータをオプションにすることができます。
var1
にブール値表現が偽(たとえば、初期化されていない)している場合、空の配列を割り当てます。
JSのFalse値:http://www.joeyjavas.com/2007/08/04/javascript-true-false-checking-for -boolean-values /。私は "価値が真実ではない"と言いますが、... –
基本的には、変数var1
が既に存在し、「真実」であるかどうかを調べます。そうである場合は、ローカルのvar1
にその値を代入します。そうでなければ、空の配列が割り当てられます。
これは、JavaScript ||
演算子が最初のtruthyオペランドの値を返すか、真でない場合は最後の値を返すためです。 var1 || var2
は真実ならvar1
、それ以外の場合はvar2
を返します。 "truthy" ではありません
var somevar;
somevar = 5 || 2; // 5
somevar = 0 || 2; // 2
somevar = 0 || null; // null
値::false
、0
、undefined
、null
、""
(空の文字列)、およびNaN
は、ここではいくつかの例です。他の言語とは異なり、空の配列やオブジェクトはJavaScriptでは真実とみなされます。
Javascriptまたは(||)は他の言語とは少し異なる働きをしますが、ブール値の代わりに最初の "truthy"値を返します。この場合、 "var1の値をvar1
に設定しますが、その値が" falsey "の場合は[]
"に設定します。
これは、関数の引数など、既に設定されている場合としない場合がある変数に "デフォルト"値を設定するためによく使用されます。
このステートメントは、空の配列をvar1に割り当てます。
長い解答と解説:
var1のはその時に初期化されていないために発生します。非初期化は偽の値です。 var1が、それは空の配列になり初期化されていない場合
が、それはnull
、var1が
false
であればその、空の配列に割り当てられたとして起こる空の配列は何もない、または
var1 = var1 || [];
場合:
は、この文を取ります any other value that javascript things of as false、それは空の配列になります。もしvar1が他の何かの値なら、それ自体に割り当てられているので何も起こりません。 (リンクのためのpstに感謝します)。簡潔に言えば、わかりやすいステートメントではありませんが、それは意味を知りたいと思っています。 :)
を使用することがはるかに明らかです:
(ただ、彼らのつま先で人々を維持し、強化しますJavaScriptを "細かい内容" の一部。)
1)
var
は、変数がすでにlocal
です。例えば。
function x (y) {
var y = y || 42 // redeclaration warning in FF, however it's "valid"
return y
}
x(true) // true
x() // 42
2)
var
関数全体のアノテーション(それが先頭に「巻き上げ」)で、未使用の時点で宣言です。
var var1
if (!var1) {
var1 = []
}
:
function x() {
y = true
var y = y || 42
}
x() // true
私は、前のいずれかのようなコードを好きですが、...そのため、巻上の
を、再宣言を許可されていない、ポスト内のコードは、これらのセマンティクスを持っています
編集私は、Ed.5の「厳密モード」が上記の影響をどのように受けているか分かりません。
これは、目標を達成する興味深い方法です。しかし、なぜ最初は無作為にnullになるのでしょうか? – TheLQ
@TheLQ:オプションのパラメータにすることができます。 – SLaks
@SLaks:でも、 'var'は必要ありませんよね? – cambraca