2012-01-06 74 views
4

我经常看到和使用的代码,如:在条件运算符内部运行代码是否安全?

var myvar = (1 < 2) ? 3 : 4 ; //if 1 < 2 then myvar = 3, else = 4 

但我刚刚看到正在执行代码的代码,就像某种更换为if(){}else{}

例子:

(1 < 2) ? alert("example1") : alert("example2"); 

我想到的第一个想法是,“哇,这就像6-7个字符短”,“无尽的可能性”或“这是我的一天”。

我的问题:

  • 这件事无差错和安全使用? (比如,里面有很多代码和嵌套的东西)

现在,我将继续以正常方式继续使用它,我担心如果我开始使用它来执行代码段不行。

+0

在我看来,你应该只使用这个三元条件来做简短的指示。对于属于真实条件或假条件的代码块,您应该使用if {} else {},但这只是我的看法。我也对使用这种三元条件的最佳方法感兴趣。 – 2012-01-06 04:27:27

回答

4

也有一些例外。你不能做到这一点:

  • break
  • continue
  • 任何块像ifforwhiledo,或try

例如。更重要的是,它可以与你的操作顺序混乱:

x < 3 ? l = true : r = true; // Syntax error, = has lower precedence than ?: 

但是,这不是理由不这样做,那是因为它是丑陋的。哪一个更清晰给你,这样的:

if(i > 5) { 
    alert('One'); 
} else { 
    alert('Two'); 
} 

i > 5 ? alert('One') : alert('Two'); 

?这不太对,是吗?保存角色绝不是做任何事情的理由,真的;否则不会有任何评论或空白。像Google Closure Compiler这样的优化器会尽可能自动为您转换,并且还有很多其他地方可以保存。最后,它只是你发现最方便和可读的。另外,如果你最终需要breakcontinue等,那么它将是相当不稳定和不吸引人的代码。

+0

接受,因为指出了明显没有人知道它们存在的异常(或者至少,他们都只是怀疑地决定不要在他们的答案中提及他们) – ajax333221 2012-01-06 04:44:30

7

这个东西没有错误且安全使用吗? (比如,内部有很多代码 ,以及嵌套的东西)

是的。但是,其中的代码越多,它的可读性就越差。

我更喜欢使用它(条件运算符)来获取简短的语句。为了可读性和可维护性,任何更复杂的内容都应得到if/else

+0

我在制作项目时通常有2个版本,原始版本中包含很长的var名称和东西,而其中一个版本的代码可能较少。 (我只打算在第二次使用这种方法) – ajax333221 2012-01-06 04:28:43

+1

有趣的。为什么甚至有第二个?对我而言,这只是更多的代码来维护。如果你专门针对JavaScript和缩小与第二,那里有东西已经这样做。 :) – 2012-01-06 04:30:00

+0

我知道JS缩小器,我只是怀疑他们会用这种方法缩小if/else – ajax333221 2012-01-06 04:33:45

2

您指的是ternary运算符。它通常用于设置与简单的字符串变量是这样的:

var phone = old ? "blackberry" : "iPhone" 

这比使用更简单的,如果:

var phone = "iphone" 
if (old) { 
    phone = "blackberry" 
} 

它在这方面的好,您所描述的例子,只要它开始变得困惑,否则我绝对不会推荐它!

你的例子可能是犯了这样的好:

var msg = 1 < 2 ? "alert1" : "alert2"; 
alert(msg); 
1

你也可以这样写:

alert(1<2? "example1" : "example2"); 

三元opertator是专为简单的情况下,有时开发商得意忘形,并用它来代替多的if..else语句,例如

var someVal = foo < bar? 'yes' : bar > fum? : fum : fi != fee? fi : fee; 

这不是一个好主意恕我直言。