Javascript 作为短条件语句的三元运算符

Javascript 作为短条件语句的三元运算符,javascript,ternary-operator,Javascript,Ternary Operator,在Javascript中使用三元运算符代替较长的条件语句,例如使用: (variable == "dog") ? dog_stuff() : false; 而不是 if ( variable == "dog" ) { dog_stuff(); } 这听起来可能是一个愚蠢的问题,但我只是觉得它非常快速和容易阅读,我只是不想使用它,如果有可能的缺点?你也可以写 (variable == 'dog') && dog_stuff(); 如果你没有else语句 backbo

在Javascript中使用三元运算符代替较长的条件语句,例如使用:

(variable == "dog") ? dog_stuff() : false;
而不是

if ( variable == "dog" ) 
{
    dog_stuff();
}
这听起来可能是一个愚蠢的问题,但我只是觉得它非常快速和容易阅读,我只是不想使用它,如果有可能的缺点?

你也可以写

(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
你也可以写

(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

只要您和其他可能需要阅读代码的人容易理解格式,就可以了。

只要您和其他可能需要阅读代码的人容易理解格式,就可以了。

这是错误的,因为您让代码执行false。想象一下下面的代码:

if ( variable == "dog" ) 
{
    dog_stuff();
} else {
    false;
}
在我看来,4行条件函数调用非常好。您可以将其简写为:

if (variable == "dog") dog_stuff();
唯一的问题是,如果您将其注释掉,或者再添加一个函数,那么事情看起来是正确的,但执行不正确:

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

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

if ( variable == "dog" ) 
{
    dog_stuff();
} else {
    false;
}
在我看来,4行条件函数调用非常好。您可以将其简写为:

if (variable == "dog") dog_stuff();
唯一的问题是,如果您将其注释掉,或者再添加一个函数,那么事情看起来是正确的,但执行不正确:

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

使用三元组没有什么错operators@Michael,操作数位于?是有条件的,你不能把任何东西传给它。整个结构a?b:c是一个表达式。在这种情况下,它看起来很奇怪,因为正在评估它的副作用,并且它的返回值正在被丢弃。@iancelland是的,我的评论毫无意义,因为我的眼睛看到变量==dog不知怎么地被留在=。很快删除…使用三元没有错operators@Michael,操作数位于?是有条件的,你不能把任何东西传给它。整个结构a?b:c是一个表达式。在这种情况下,它看起来很奇怪,因为正在评估它的副作用,并且它的返回值正在被丢弃。@iancelland是的,我的评论毫无意义,因为我的眼睛看到变量==dog不知怎么地被留在=。很快删除…看起来很尴尬,但这是一种结合功能的简洁方式谢谢,这正是我想要的东西我给它+1表示聪明,但老实说,没有人应该这么做。效率,依我看,不值得在可读性上下一步。看起来很尴尬,但这是一种巧妙的结合功能的方式谢谢,这正是我想要的东西。我给它+1表示聪明,但老实说,没有人应该这样做。效率,依我看,不值得在可读性上下一步。我一直担心会因此而缩短条件语句,但我觉得使用三元运算符可以让它变得相当清楚,并消除对不确定依赖关系的担忧。我通常在内联放大括号:if condition{execute;}由于这个原因,我一直对缩短条件语句很谨慎,但我觉得使用三元运算符可以使它变得相当清楚,并消除对不确定依赖关系的担忧。我通常在这个语句中内联使用大括号:if condition{execute;}+1。它可能会短10个字符,但最好在过于聪明的东西上写清楚简洁的代码。它可能要短10个字符,但最好在过于聪明的东西上写清楚简洁的代码。