您可以在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
。
答案 0 :(得分:4)
我认为你不能在一行中整齐地做到这一点,但做这样的事情很容易:
var json = { value1: getval() };
if (flag) json.value2 = getval2();
return json;
这还有几行,但这也意味着你不必重复自己。
如果您真的想在一行中执行此操作并且已经使用了underscore.js,那么这里是使用_.extend()
的替代方法:
return _.extend({ value1: getval() }, flag ? { value2: getval2() } : {});
它略微缩短但个人而言,我建议采用第一种方法。
答案 1 :(得分:0)
它更简单,只是把条件放在对象之外,而不是写:
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”}
测试(假)---> {value1:“value1”}
它使用与您在问题中使用的if语句相同的逻辑,但使用return语句中的 Conditional ternary Operator 给出一行解决方案。
答案 2 :(得分:-1)
<强>更新强>
Okey,如果您只想value2
设置flag == true
,请执行以下操作:
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/
这样,您只需设置value2
if flag == true
并让var保持不变,如果它是假的。
此时答案就是:不,你不能这样做。
原因很简单:用var name = {..}
声明一个带有参数的对象。这个声明有一些规则,这个简短的if
检查不在规则范围内。
我在这里回答旧答案,也许它可以帮助任何人。
旧答案
(不是OP想要的方式。这里的所有内容都来自旧答案,甚至是编辑部分)
是的,你可以。
请看以下代码:
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'
,如果没有定义,这也应该有效。
修改强>
我再次阅读了这个问题,我不确定我是否理解它。如果真正的问题是,如果可能“不设置value"
if flag != true
,那么我建议不要这样做!
这里是我的评论引用:
我建议不要这样做!我在上一个项目中意外地做了这件事并对这个决定感到后悔,因为这样会导致不一致,并导致将来更难的工作。最好总是设置value2并检查它是否为value2!= null