簡體   English   中英

您可以在JavaScript對象文字定義中使用條件嗎?

[英]Can you use conditionals in JavaScript object literal definitions?

您可以在JavaScript對象文字定義中使用條件嗎?

我的意思是,而不是:

if(flag)
{
    return { value1: getval(), value2: getval2()};
}
else
{
    return { value1: getval()};
}

有什么辦法可以做這樣的事情:

return { value1: getval(), flag?(value2: getval2())};

我知道我可以做到:

return { value1: getval(), value2: flag?getval2():null };

但是那樣,成員value2的定義與flag的值無關。

我認為您無法在一行中整齊地完成此操作,但是這樣做很容易:

var json = { value1: getval() };
if (flag) json.value2 = getval2();
return json;

還有幾行,但這也意味着您不必重復自己。


如果您真的想在一行中執行此操作並且已經在使用underscore.js,那么這里是使用_.extend()的替代方法:

return _.extend({ value1: getval() }, flag ? { value2: getval2() } : {});

它略短一些,但就個人而言,我建議使用第一種方法。

這要簡單得多,只需將條件放在對象外部,而不是編寫:

return { value1: getval(), flag?(value2: getval2())};

你會需要:

return flag ? { value1: getval(), value2: getval2()} : { value1: getval()};

這是一個簡單的演示:

 function test(flag) { return flag ? {value1: "value1", value2: "value2"} : {value1: "value1"}; } console.log(test(true)); console.log(test(false)); 

輸出如下:

test(true)---> {value1:“ value1”,value2:“ value2”}

test(false)---> {value1:“ value1”}

它使用與您在問題中使用的if語句相同的邏輯,但是return語句內的條件三元運算符提供了單行解決方案。

更新

Okey,因此,如果您只想在flag == true設置value2 ,請執行以下操作:

var flag = false;

function getreturn() {
    var return_val = { value1: getval() };
    if (flag==true) { return_val.value2 = getval2() }
    return return_val;
}

function getval() {
    return "hello";
}

function getval2() {
    return "world";
}

console.log(getreturn());

JSFiddle: http : //jsfiddle.net/omxqs61g/2/

這樣,僅當flag == true時才設置value2如果var為false則讓var保持不變。

答案也是在這一點上:不,你不能這樣做。 原因很簡單:使用var name = {..}您可以使用其參數聲明一個對象。 該聲明有一些規則, if檢查不在規則之內, if此簡短。

我在這里留下舊的答案,也許它可以幫助任何人。

老答案

(不是OP想要的方式。這里的所有內容都來自舊答案,甚至是Edit部分)

是的你可以。

看下面的代碼:

var flag = false;

function getreturn() {
    return { value1: getval(), value2: flag ? getval2() : null };
}

function getval() {
    return "hello";
}

function getval2() {
    return "world";
}

console.log(getreturn());

JSFiddle: http : //jsfiddle.net/omxqs61g/1/

如果flagtrue ,則將獲得:

Object {value1: "hello", value2: "world"}

否則您將獲得:

Object {value1: "hello", value2: null}

如果您不使用布爾值作為flag ,則還可以檢查typeof flag !== 'undefined' ,如果typeof flag !== 'undefined'它也應該起作用。

編輯

我再次閱讀了該問題,不確定我是否理解正確。 如果真正的問題是,如果flag != true ,是否有可能“不設置value"那么我建議不要這樣做!

這是我的評論:

我建議不要這樣做! 我在上一個項目中無意中做了此操作,並對這個決定感到遺憾,因為這樣會導致不一致,並在將來導致更多工作。 最好總是設置value2並檢查它是否為value2!= null

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM