この行が何をするのか知りたい:
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
パラメータなしで呼び出されますsomeFunction
falsy
false、空の文字列、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
、または の値がfoo
false と評価された場合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);
}