你能在JavaScript对象文字定义中使用条件吗?

时间:2015-08-17 10:09:07

标签: javascript

您可以在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

3 个答案:

答案 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/

如果flagtrue,您将获得:

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

否则你会得到:

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

如果你没有为flag使用布尔值,你也可以检查是否typeof flag !== 'undefined',如果没有定义,这也应该有效。

修改

我再次阅读了这个问题,我不确定我是否理解它。如果真正的问题是,如果可能“不设置value" if flag != true,那么我建议不要这样做!

这里是我的评论引用:

  

我建议不要这样做!我在上一个项目中意外地做了这件事并对这个决定感到后悔,因为这样会导致不一致,并导致将来更难的工作。最好总是设置value2并检查它是否为value2!= null