对象创建中的三元运算符

时间:2014-01-10 18:17:16

标签: javascript jquery

我在下面有一个传统的条件语句,我想知道我是否可以将其转换为内联条件(三元?)语句。

var type;

if type === 1 {

    $('#form1').append(new mySuperObject({ model: myModelB}).render().$el);

} else {


    $('#form1').append(new mySuperObject({ model: new myModelA({ type: myType.Gas }) }).render().$el);

}

这是正确的格式吗?

$('#form1').append(new mySuperObject({ model: ((type === 1) ? myModelB : new myModelA({ type: myType.Gas) }) }).render().$el);

当我尝试时,我在Firebug控制台中收到以下错误:

TypeError: this.model.get(...) is undefined

由于

4 个答案:

答案 0 :(得分:4)

我认为你的括号不合适。比较下面的两行。第一个是原始的。

$('#form1').append(new mySuperObject({ model: ((type === 1) ? myModelB : new myModelA({ type: myType.Gas) }) }).render().$el);
$('#form1').append(new mySuperObject({ model: ((type === 1) ? myModelB : new myModelA({ type: myType.Gas })) }).render().$el);

为了便于阅读,你可以选择:

var model = (type === 1) ? myModelB : new myModelA({ type: myType.Gas });
$('#form1').append(new mySuperObject({ model: model }).render().$el);

答案 1 :(得分:1)

你有一些语法错误..

为了便于阅读,您可以使用

var objToUse = (type === 1) ? myModelB : new myModelA({ type: myType.Gas});
$('#form1').append(new mySuperObject({ model: objToUse }).render().$el);

答案 2 :(得分:1)

不要把所有这些东西都塞进去。为避免重复代码,您可以执行以下操作:

var type;
var model;

if(type === 1) {

    model = myModelB;

} else {

    model = new myModelA({ type: myType.Gas });

}

$('#form1').append(new mySuperObject({ "model": model}).render().$el);

答案 3 :(得分:1)

以下内容:

if (type === 1) {
    $('#form1').append(new mySuperObject({ model: myModelB}).render().$el);
} else {
    $('#form1').append(new mySuperObject({ model: new myModelA({ type: myType.Gas }) }).render().$el);
}

与:

相同
 var model;
 if (type === 1) {
     model = myModelB;
 }
 else {
     model = new myModelA({type: myType.Gas});
 }
 $("#form1").append(new mySuperObject({model: model})).render().$el;

与以下内容相同:

 var model = (type === 1) 
             ? myModelB 
             : new myModelA({type: myType.Gas});

 $("#form1").append(new mySuperObject({model: model})).render().$el;

如果你真的想要,你可以将它们塞进去:

 $("#form1").append(new mySuperObject({model: (type === 1) ? myModelB : new myModelA({type: myType.Gas})})).render().$el;

我确实建议使用第二个或第三个变体,而不是将它们一起干扰。实际上,我的函数式程序员喜欢第三个,实际上,因为你只有一个赋值而不必单独声明变量而不是赋值。