2011-01-28 5 views
4

変数が定義されている場合にのみ、オブジェクトにプロパティを含める必要があります。私はそうでなければ財産を望んでいません。私は空の文字列と同じにしたくない。私はこのような何か考えている:myVarが未定義である場合には未定義に戻すための3値?

someFunc({ 
    bing: "bing", 
    bang: (myVar) ? myVar : undefined, 
    boom: "boom" 
    }, "yay"); 

を、私は、これは以下のように同じものになりたい:

someFunc({ 
    bing: "bing", 
    boom: "boom" 
    }, "yay"); 

私は右のそれをやっていますか?

+1

それを振り返ってみると、私はおそらく書かれている必要があります(myVar ===定義されていない)それは偽の値を設定してください。他に何か? – Matrym

+0

それはすべてどの偽の値を残したいかによって決まります。 'undefined'ですか? 'ヌル'? '0'? –

+0

タイトルは三項式を要求しますが、受け入れられた回答には三項式が含まれていません。ブー! – LinuxDisciple

答えて

5

があり違い、この間ある

var args = { 
    bing: 'bing', 
    boom: 'boom' 
}; 

if (typeof myVar !== 'undefined') { 
    args.bang = myVar; 
} 

someFunc(args, 'yay'); 
+0

もちろん、違いは微妙です。 'in '演算子は... inループ(' for(foo in ex2){...} ')の場合と同様に、(if(foo in ex1){...}'の違いを知ることができます。特にtype.example.foo === typeof ex2.foo === "undefined" 'と' ex1.foo === ex2.foo === undefined'の2つのケースがあります。 –

3

私はあなたがjavascriptのtruthinessとfalsinessの注意する必要があり

var config = { 
    bing: "bing", 
    boom: "boom" 
}; 

if (typeof myVar !== 'undefined') config.bang = myVar; 

someFunc(config, 'yay'); 

ような何かをするだろう。私の例のifステートメントは、myVarが定義されている場合にのみbangをconfigに置きますが、myVarがfalseとして定義されている場合は動作します。

+0

'bang === false'の場合はどうなりますか? –

+0

@matt fixed - 自分のコードで正しい関数を探していた – hvgotcodes

+0

存在しないときにそれを追加するのではなく、存在するときにそれを追加する方が意味があると思います。 – Raynos

0

これを行うための最善の方法は、それが存在しない場合、それを削除、その後優れている存在しているときにそれを追加することは明らか

var args = { 
    bing: "bing", 
    bang: myVar, 
    boom: "boom" 
} 

if (myVar === undefined) { 
    delete args.myVar; 
} 

someFunc(args, "yay"); 

だろう。

ポイントは実際にそこにないようなものを扱うことですが、ネイティブdeleteを使用してオブジェクトからプロパティを削除するのが最も安全です。

setTimeoutとコールバックを使用してハッキングすることができます。私は上記のコードは、仕事を取得します。この

var args = { 
    bing: 4, 
    bang: (myVar === undefined) ? (function() { 
     setTimeout(function() { 
      delete args.bang; 
     }, 0); 
    })() : myVar 
}, "yay"); 
+0

'myVar === false'の場合はどうなりますか? –

+0

@MattBallそれはあなた自身の疑問の真実の三値的なチェックを使用するためのあなた自身のせいです。私はあなた自身の論理論理をどのように扱うべきかを 'delete'する方法を教えています。 – Raynos

+0

あなたは正しい人と話していますか? – BoltClock

0
var obj = { 
    bing: "bing", 
    boom: "boom" 
} 

myVar != null && obj.bang = myVar; 

someFunc(obj, "yay"); 

againtsをお勧めします。関数呼び出しの中で直接行うことはできないと思います。ここでは、そのため

var ex2 = {}; 

私はそれを行うだろう方法は次のとおりです:

var ex1 = {foo: undefined}; 

と、この:

+0

(読みやすい) 'if(myVar)obj.bang = myVar;'を使用してみませんか? –

+0

@Marcelこれは、0、偽などのすべての偽値を除外します。 –

+0

@Marcel &&演算子を意味する場合、私は 'x && y = x;'を 'if(x){y = x; } ' –

関連する問題