2010-12-19 13 views
0
function foo(o){ 
    o=o || {}; 
} 

foo(one:1); // ??? 
    alert(foo(one); // ??? 


foo(one:1,two:2,three:3) // ??? 
    alert(foo(one,two,three)); // ??? 

このJavaScriptの正確な機能は何ですか?JavaScriptオブジェクトを引数として渡したい

私は多くのコードで見ました。

+0

オリジナルの質問では、実際にはコードスニペットの内容ではなく、とにかく意味をなさない "o = 0 || {}"について質問します。 "o = o || {}"にする必要があります。 – Pointy

+0

@ Pointy:それはタイプミスだと思う。 –

+0

はい私は同意します - 私はそれを編集することを考えましたが、代わりに明示的なメモを残すことを決めました。 – Pointy

答えて

2

あなたが関数に引数であるオブジェクトを渡す

var arg = {key: val}; 

、その後

var result = foo(arg); 

あなたのオブジェクトを作成します。あなたの関数が複数の引数を取ることができれば、あなたがそのようARG1、ARG2、ARG3とあなたが希望

var theFunction = function(arg1, arg2, arg3) { 
     // arg1, arg2, and arg3 are all references in this function 
    } 

関数を定義する際に、引数になるように定義されています。 Javascriptには、あなたが望むように多くの引数を渡すことができるという点で柔軟性があります。 APIが明確になるように明示的な引数で関数を定義するのは良い設計です。しかし、分からないケースがあるので、Javascriptでは 'arguments'変数で渡されたすべての引数を取得できます。 Javascriptは、この変数をすべての関数で使用できるようにします。しかし、ほとんど使用しないでください。ここで例

http://www.seifi.org/javascript/javascript-arguments.html

o = o || {}; 

はOされる変数 'O' を設定し、又はOが定義されていない場合、空のオブジェクトリテラルとのリンクです。基本的に変数が '偽り'の場合は初期化されます。ヌルオブジェクトの問題を防ぐテクニックです。

4

発現は

o = o || {}; 

がブール変数として "O" の値を解釈します。その値が "true"の場合、 "o"を現在の値に設定します。 "false"の場合は、 "o"を設定して新しいObjectインスタンスを参照します。

"o"がnullでないことを確認し、それが新しいオブジェクトインスタンスに初期化されていることを確認します。

限り、あなたは「オブジェクトリテラル」の表記を使用する必要がある関数を呼び出すよう:

foo({ key1: value, key2: value, ... }); 

編集を —コメントで述べたように、「O」の値の解釈ブール値はそれ自身の興味深いテーマです。この特定の場合、インテントは、 "o"がヌルかどうかを確認することです。 "o"の値はfalseと評価されますが、かもしれないはここで扱いが異なる必要がありますが、知るべき質問には明らかに十分な文脈がありません。

+0

真実でも偽でもない。 JavaScriptの変数は、真実か偽である可能性があり、その真実性や偽善は、その結果の評価方法を決定します。 'false'、' undefined'、 'null'、' 0'、 '''(空文字列)'、 'NaN'の値は偽であり、' o = o || {}; 'は' o 'が偽であれば 'o = {};'と評価されます。 –

+0

はい、私はそれをすべて知っています。私は、 "変数" o "の値をブール値として解釈することに注意してください。その単語「解釈する」はあなたが書いたものを正確にカプセル化することを意図していました:-) – Pointy