2012-02-21 107 views
1

这有什么错用使用的地方在Javascript较长条件语句三元运营商,例如:三元运营商短条件语句

(variable == "dog") ? dog_stuff() : false; 

不是

if (variable == "dog") 
{ 
    dog_stuff(); 
} 

这听起来像一个愚蠢的问题,但我发现它非常快速和容易阅读,我只是不想使用它,如果有可能的缺点?

+0

有注意使用三元运算符错误 – 2012-02-21 14:44:11

+0

@Michael,“?”左边的操作数是有条件的,并且不会将任何回传给它。整个结构'一个? b:c'是一个表达式。它在这种情况下看起来很奇怪,因为它正在评估其副作用,并且它的返回值被丢弃。 – 2012-02-21 18:09:28

+0

@IanClelland是的,我的评论没有任何意义,因为我的眼睛看到'(variable ==“dog”)''在'='左边。删除不久... – 2012-02-21 18:15:35

回答

5

你也可以写

(variable == 'dog') && dog_stuff(); 

,如果你没有一个else语句。

以下几行Backbone.js的:

options || (options = {}); 
    models = _.isArray(models) ? models.slice() : [models]; 
    model = this.getByCid(models[i]) || this.get(models[i]); 

您可以将多个语句,如果它是非常有必要的:

(1==1) && (a=2,b=3) 
alert(a); // 2 
alert(b); // 3 
+0

看起来很尴尬,但一个干净的方式来耦合功能 – Mikhail 2012-02-21 14:48:01

+0

谢谢,这就是我正在寻找的那种 – Dormouse 2012-02-21 14:48:45

+0

我给它+1的聪明,但老实说,没有人应该这样做。 IMO的效率不值得在可读性方面下降。 – Mikhail 2012-02-21 19:04:34

1

只要格式很容易理解,你和其他人可能需要阅读代码,这很好。

+0

+1。它可能缩短10个字符,但最好是写出清晰简洁的代码,而不是过于聪明的代码。 – Stephen 2012-02-21 15:44:09

3

这是错误的,因为你告诉你的代码执行false。想象下面的代码:

if (variable == "dog") 
{ 
    dog_stuff(); 
} else { 
    false; 
} 

IMO 4行条件函数调用是完全正常的。你可以把它简写:

if (variable == "dog") dog_stuff(); 

与此唯一的问题是,如果你把它注释掉,或添加1更多的功能,那么事情看起来是正确的,但不能正确执行:

if (variable == "dog") dog_walk(); dog_bark(); // dog_bark executes always! 
if (variable == "dog") // dog_walk(); 
earn_cash(); // suddenly earn_cash() is dog-dependent. 
+0

因为这个,我一直对缩短条件语句保持警惕,但是我觉得使用三元运算符会使它相当清楚并消除对不确定依赖关系的担心。 – Dormouse 2012-02-21 14:49:35

+0

我通常使用花括号:'if(condition){execute(); }' – Mikhail 2012-02-21 14:50:27