[英]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/
如果flag
為true
,則將獲得:
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.