3

Objects 要素に関数を追加して代替スイッチを実行できる JavaScript の次の構文を見ました。次の点を考慮してください。

var insert = insert || {};

 insert.Actor = function (user) {
    //Do Somthing
}

これにより、次のことが可能になります。

function addUser(type) {

    if (insert[type]) {
            return insert[type](user);
        }
}

この実装は気に入っていますが、2 つの質問があります。

  1. このステートメントは正確には何をしているのですか? 通常のオブジェクトを宣言することはできますか?

    var 挿入 = 挿入 || {};

  2. 読みやすさの他に、通常の switch ステートメントの代わりにこれを使用すると、どのような利点がありますか。

4

5 に答える 5

3

JavaScript では、任意のオブジェクトに関数を追加できます。表示される構文は、「オブジェクトが既に存在する場合...それを使用する」、そうでない場合は新しいオブジェクトを作成するだけです。

var insert = insert || {};

変数insertはそれ自体に設定されています。||(OR) に設定され{}ているのは、新しいオブジェクトの短い構文です。

于 2013-08-14T01:35:55.077 に答える
1

このステートメントは正確には何をしているのですか? 通常のオブジェクトを宣言することはできますか?

JS では、foo.barfoo が定義されていないと参照エラーになります。 var insert = insert || {};がオブジェクトになることを保証するinsertため、次のようなチェックはif(insert[type])期待どおりに機能します (insert[type]未定義になります)。

より一般的に||は、次のように機能する論理 OR 演算子です: http://www.ecma-international.org/ecma-262/5.1/#sec-11.11左辺の式 (insertこの場合) が "真の値" (オブジェクトを含むが、0やのような値は含まないundefined) の場合、値は LHS です。それ以外の場合、値は RHS 式です。

読みやすさの他に、通常の switch ステートメントの代わりにこれを使用すると、どのような利点がありますか。

if(insert)switch ステートメントのすべてのブロックに、フォームの条件を多数含める必要があります。この方法を使用すると、それらのほとんどを回避できます。

于 2013-08-14T01:43:04.163 に答える
0
  1. insertそれは、そのスコープですでに宣言されていると信じる理由があるかどうか、およびそれinsertがあなたが望むものと同じであるかどうかに大きく依存します。insertが別の場所で定義されていて、実行したいことを行わない場合、この構文は役に立ちません。別の場所で既に定義されている にスコープが設定されるからですinsertinsert
  2. ステートメントを使用するswitchのではなく、スタイルの好みです。本当にそれだけです。「これを読むのは誰で、これが何をするのかを理解する上で最も役立つのは何ですか?」と自問する必要があります。
于 2013-08-14T01:46:01.110 に答える
0
insert || {};

左から右に真である最初のオペランドを返します。

これは「OR」演算子です。Javascript では、「OR」演算子は単純に true/false ブール値を返すわけではありません。これは、insert が定義されていない場合は、オブジェクトとして定義するというショートカットです。

于 2013-08-14T01:37:08.337 に答える