この行が何をするのか知りたい:
foo || (foo = this.foo)
次の関数定義で
someFunction: function(foo)
{
foo || (foo = this.foo);
...
}
この行が何をするのか知りたい:
foo || (foo = this.foo)
次の関数定義で
someFunction: function(foo)
{
foo || (foo = this.foo);
...
}
これはおそらくより一般的に次のように記述されます。
someFunction: function(foo)
{
foo = foo || this.foo;
// do something with foo
}
foo次のいずれかの場合、パラメーターをコンテキストのfooインスタンス変数に設定するだけです。
someFunctionパラメータなしで呼び出されますsomeFunctionfalsyfalse、空の文字列、0、null、未定義などのパラメーターを使用して呼び出されます。例として、someFunction がオブジェクト リテラル内で次のように定義されているとします。
var myObject = {
foo: "default value of foo",
someFunction: function(foo)
{
foo = foo || this.foo;
// do something with foo
}
}
このようにして、someFunctionのパラメータfooは必要に応じてデフォルト値に戻ります。
fooに渡されない場合someFunction、または の値がfoofalse と評価された場合fooはthis.foo、「デフォルト」値として使用されます
編集: JS を含む多くのプログラミング言語が短絡評価を使用するため、機能します。が true と評価された場合、ステートメント全体が既に true であるためfoo、エンジンはわざわざその部分を評価しません。(foo = this.foo)
が false の場合foo(JS は厳密に型指定されていないため、この使用法では「提供されていない」ことを意味します)、2 番目の部分が評価され、最終的に の値が設定されますfoo。
foo || (foo = this.foo);
と同じです
if (!!!foo) {
foo = this.foo;
}
私が理解している限りfoo、パラメーターが設定されているかどうかを確認し、設定されていない場合はデフォルトで上書きします(this.foo)。
通常、fooダミー変数のプレースホルダーです。
someFunction: function(foo)
{
// If foo is null, then foo is assigned with this.foo
// If not, the original value of foo is taken.
foo || (foo = this.foo);
}