Snippet 1:
if ( x ) {
foo();
}
Snippet 2:
x ? foo() : 0;
What are the differences between those two snippets?
Edit: Corrected the syntax error.
Update: btw, it seems that there is an even shorter notation开发者_如何学Go:
x && foo();
Snippet #2 is an invalid ECMAScript expression since it lacks the required : blah
in order to make it a ternary.
EDIT: There isn't really a difference between the two snippets, they both invoke foo
if x
is truthy. If x
is falsy (undefined/false/empty string/0/) then first snippet wouldn't evaluate to anything, latter snippet would evaluate to 0
but that 0
really has no impact on the script.
I think you meant to ask the following
// Why should I use
if (x) {
do();
}
// instead of
x && do();
or
// Why should I use
if (x) {
do();
} else {
dont();
}
//instead of
x ? do() : dont()
As they are written, there is no difference in the output. I don't like using the ternary or the && operator in these cases because of the semantics of using the ternary and &&. A ternary returns a value that you're not using, as does the && expression. Therefore, I'd rather use the way the language intends operators to be used.
However, I love using && for null checks
var val = obj && obj.getValue();
Note that in this case, we are using the return value of the expression
Generally, if
is a statement (e.g. you can't assign it to a variable) and the ternary operator ?:
is part of an expression (yields a value which can be assigned to variables).
Also, the if
block can contain statements while the components of ?:
can only contain expressions.
In the example you give, there is no difference, since you don't use the result of the ?:
.
Both snippets evaluate foo()
only if x is a true value.
精彩评论