2011-01-28 99 views
4

我想僅在定義變量的情況下才將屬性包含在對象中。否則,我不想要財產。我甚至不希望它等於一個空白的字符串。我想是這樣的:三元返回undefined?

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

在這種myVar是不確定的情況下,我想這會導致同樣的事情如下:

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

我這樣做對嗎?

+1

回顧它,我應該寫(myVar === undefined)來防止它匹配一個假的val。還要別的嗎? – Matrym 2011-01-28 20:08:51

+0

這一切都取決於你想要忽略哪些falsy值。 `undefined`? `null`? `0`? – 2011-01-28 20:13:24

+0

標題請求三元表達式,但接受的答案不包含三元表達式。噓! – LinuxDisciple 2016-06-07 22:43:03

回答

5

有一個差這間

var ex1 = {foo: undefined}; 

這:

var ex2 = {}; 

因此,這裏是我會怎麼做:

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

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

someFunc(args, 'yay'); 
3

我會做類似

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

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

someFunc(config, 'yay'); 

你必須要小心的JavaScript感實性和falsiness的。如果我的示例中的if語句僅在定義了myVar的情況下將配置文件放在配置文件中,但它在myVar定義爲false時有效。

+0

如果`bang === false`會怎麼樣? – 2011-01-28 20:08:56

+0

@matt fixed - 在我的代碼中尋找正確的功能 – hvgotcodes 2011-01-28 20:10:14

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
var obj = { 
    bing: "bing", 
    boom: "boom" 
} 

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

someFunc(obj, "yay"); 

上面的代碼能夠完成任務。我不認爲你可以直接在函數調用中做到這一點。