1

この行が何をするのか知りたい:

foo || (foo = this.foo)

次の関数定義で

someFunction: function(foo)  
{   
    foo || (foo = this.foo);  
    ...  
}
4

5 に答える 5

6

これはおそらくより一般的に次のように記述されます。

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は必要に応じてデフォルト値に戻ります。

于 2012-10-15T06:19:50.290 に答える
4

fooに渡されない場合someFunction、または の値がfoofalse と評価された場合foothis.foo、「デフォルト」値として使用されます

編集: JS を含む多くのプログラミング言語が短絡評価を使用するため、機能します。が true と評価された場合、ステートメント全体が既に true であるためfoo、エンジンはわざわざその部分を評価しません。(foo = this.foo)

が false の場合foo(JS は厳密に型指定されていないため、この使用法では「提供されていない」ことを意味します)、2 番目の部分評価され、最終的に の値が設定されますfoo

于 2012-10-15T06:13:36.500 に答える
0
foo || (foo = this.foo); 

と同じです

if (!!!foo) {
    foo = this.foo;
}
于 2012-10-15T12:36:10.263 に答える
0

私が理解している限りfoo、パラメーターが設定されているかどうかを確認し、設定されていない場合はデフォルトで上書きします(this.foo)。

于 2012-10-15T06:13:49.857 に答える
0

通常、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);
}
于 2012-10-15T06:14:47.147 に答える