2012-06-28 8 views
10

これは私には意味がありませんが、私はこれを使用してコードを見て感じている:変数宣言に条件を追加できますか?

var abc = def || ghi; 

私の質問があり、これが有効なのですか?変数宣言に条件を追加できますか?私の答えは「いいえ」だと思いますが、これは私の心の後ろにあります。

答えて

17

それがにISN場合、これは」abcdefの値を与えます(すなわち、falsenullundefined0または空の文字列ではない)そうでない場合はghiの値を返します。

これは同等です:

var abc; 
if (def) abc = def; 
else abc = ghi; 

は、この一般的なオプションのために使用されている:あなたはmyfunc({mything:"bbb"})を呼び出す場合

function myfunc (opts) { 
    var mything = opts.mything || "aaa"; 
} 

それはあなたが与える値を使用しています。何も入力しない場合は、"aaa"が使用されます。いずれかに該当する場合この場合

は、呼び出し側が完全にパラメータをスキップさせるために、我々はまた、参照、

opts = opts || {}; 
+0

+1。 '' def''がtrueに評価されるかどうかを言うのがより正確でしょう。 '0'なら空文字列' false'などです。それで 'abc'は' ghi'の値を取得します。 –

3

はい、あなたは変数の宣言に

を条件を追加することができますあなたはこのようにそれを使用することができ、

function greet(person) { 
    var name = person || 'anonymouse'; 
    alert('Hello ' + name); 
} 
greet('jashwant'); 
greet();​ 

jsfiddle demo

0

大丈夫と機能を開始している可能性があり、それはのようなものである、あなたはチェックのいずれか。本当のものが返されます。 :)

var abc = def || ghi; 

は同等です:

var abc = return (def == true) or (ghi == true) 
+2

注意してください。あなたの答えは、この操作が常にブール値を割り当てることを意味します。これは、 'def'と' ghi'がブール値である場合の** ** **の場合です。すべての場合、 'abc'は' ghi'の値をとるでしょう(値が何であれ)。 'def'が" hello "の場合、abcは" hello "(ブーランではない)になります。 'def'がfalse/empty/zero/undefined/etcで、' ghi'が "world"の場合、 'abc'は" world "(ブール値ではない)になります。 – user113215

6

コードVAR abc = def || ghi;

あなたはif文のような状態にしたい

if (def) { //where def is a truthy value 
    var abc = def; 
} else { 
    abc = ghi; 
} 

と同じことですか?三項演算子のように書かれたよう

if (xxx==="apple") { 
    var abc = def; 
} else { 
    abc = ghi; 
} 

ある:

var abc = (xxx==="apple") ? def : ghi; 
+0

ちょうど私が昨日読んだものの実例を見ました(javascriptホイスト)。あなたの最初の例で 'def'が偽であっても、' abc'はグローバルではありません。私は正しい? – Jashwant

+0

'abc'はグローバルにすることができ、定義されている場所だけに依存します。 – epascarello

関連する問題