在条件运算符内部运行代码是否安全?
我经常看到和使用的代码,如:在条件运算符内部运行代码是否安全?
var myvar = (1 < 2) ? 3 : 4 ; //if 1 < 2 then myvar = 3, else = 4
但我刚刚看到正在执行代码的代码,就像某种更换为if(){}else{}
:
例子:
(1 < 2) ? alert("example1") : alert("example2");
我想到的第一个想法是,“哇,这就像6-7个字符短”,“无尽的可能性”或“这是我的一天”。
我的问题:
- 这件事无差错和安全使用? (比如,里面有很多代码和嵌套的东西)
现在,我将继续以正常方式继续使用它,我担心如果我开始使用它来执行代码段不行。
也有一些例外。你不能做到这一点:
break
continue
- 任何块像
if
,for
,while
,do
,或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这样的优化器会尽可能自动为您转换,并且还有很多其他地方可以保存。最后,它只是你发现最方便和可读的。另外,如果你最终需要break
,continue
等,那么它将是相当不稳定和不吸引人的代码。
接受,因为指出了明显没有人知道它们存在的异常(或者至少,他们都只是怀疑地决定不要在他们的答案中提及他们) – ajax333221 2012-01-06 04:44:30
这个东西没有错误且安全使用吗? (比如,内部有很多代码 ,以及嵌套的东西)
是的。但是,其中的代码越多,它的可读性就越差。
我更喜欢使用它(条件运算符)来获取简短的语句。为了可读性和可维护性,任何更复杂的内容都应得到if/else
。
我在制作项目时通常有2个版本,原始版本中包含很长的var名称和东西,而其中一个版本的代码可能较少。 (我只打算在第二次使用这种方法) – ajax333221 2012-01-06 04:28:43
有趣的。为什么甚至有第二个?对我而言,这只是更多的代码来维护。如果你专门针对JavaScript和缩小与第二,那里有东西已经这样做。 :) – 2012-01-06 04:30:00
我知道JS缩小器,我只是怀疑他们会用这种方法缩小if/else – ajax333221 2012-01-06 04:33:45
您指的是ternary运算符。它通常用于设置与简单的字符串变量是这样的:
var phone = old ? "blackberry" : "iPhone"
这比使用更简单的,如果:
var phone = "iphone"
if (old) {
phone = "blackberry"
}
它在这方面的好,您所描述的例子,只要它开始变得困惑,否则我绝对不会推荐它!
你的例子可能是犯了这样的好:
var msg = 1 < 2 ? "alert1" : "alert2";
alert(msg);
你也可以这样写:
alert(1<2? "example1" : "example2");
三元opertator是专为简单的情况下,有时开发商得意忘形,并用它来代替多的if..else语句,例如
var someVal = foo < bar? 'yes' : bar > fum? : fum : fi != fee? fi : fee;
这不是一个好主意恕我直言。
在我看来,你应该只使用这个三元条件来做简短的指示。对于属于真实条件或假条件的代码块,您应该使用if {} else {},但这只是我的看法。我也对使用这种三元条件的最佳方法感兴趣。 – 2012-01-06 04:27:27