admin管理员组

文章数量:1290348

I often see and use codes like:

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

But I just recently saw a code that was executing code, just like some kind of replacement for the if(){}else{}:

Example:

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

The first thoughts that came to me were, "wow, this is like 6-7 characters shorter", "endless of possibilities" or "this made my day".

My question:

  • Is this thing error-free and safe to use? (like, with a lot of code inside, and nested stuff)

For now, I will just keep using it in the normal way, I have the fear that if I start using it to execute pieces of code might not work.

I often see and use codes like:

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

But I just recently saw a code that was executing code, just like some kind of replacement for the if(){}else{}:

Example:

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

The first thoughts that came to me were, "wow, this is like 6-7 characters shorter", "endless of possibilities" or "this made my day".

My question:

  • Is this thing error-free and safe to use? (like, with a lot of code inside, and nested stuff)

For now, I will just keep using it in the normal way, I have the fear that if I start using it to execute pieces of code might not work.

Share Improve this question edited Dec 29, 2014 at 16:27 lost_in_the_source 11.2k10 gold badges49 silver badges79 bronze badges asked Jan 6, 2012 at 4:23 ajax333221ajax333221 11.8k16 gold badges62 silver badges95 bronze badges 1
  • In my opinion, you should use that ternary condition only for short instructions. For code blocks belonging to the true condition or the false condition, you should use if{} else {}, but it is just my opinion. I'm also interested in best ways to use this ternary condition. – Jeremy D Commented Jan 6, 2012 at 4:27
Add a ment  | 

4 Answers 4

Reset to default 7

Is this thing error-free and safe to use? (like, with a lot of code inside, and nested stuff)

Yes. However, the more code that's within it, the less readable it bees.

I prefer to use it (the conditional operator) for short, concise statements. Anything more plex deserves an if/else for the sake of readability and maintainability.

There are some exceptions. You can't do this with:

  • break
  • continue
  • Any block like if, for, while, do, or try

for example. What's more, it can mess with your order of operations:

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

But that's not the reason not to do it, it's because it's ugly. Which one is clearer to you, this:

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

or

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

? It's not quite right, is it? And saving characters is never a reason to do anything, really; otherwise there would be no ments or whitespace. A good minifier like Google Closure Compiler will automatically convert these for you when possible, and there are plenty of other places to save. In the end, it's just whatever you find most convenient and readable.

Also, if you do end up needing break, continue, etc. then it's going to be rather inconsistent and unattractive code.

You're referring to the ternary operator. It's usually used for setting variables with simple strings like this:

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

That much simpler than using an if:

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

It's good in this context, in the example you described and as soon as it starts getting confusing or I'd definitely not remend it!

Your example might be made better like this:

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

You could also write:

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

The ternary opertator is designed for simple cases, sometimes developers get carried away and use it to replace multiple if..else statements, e.g.

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

which is not a good idea IMHO.

本文标签: javascriptIs it safe to run code inside the conditional operatorStack Overflow