开发者

Difference between if (x) { foo(); } and x ? foo() : 0;

开发者 https://www.devze.com 2023-01-29 02:36 出处:网络
Snippet 1: if ( x ) { foo(); } Snippet 2: x ? foo() : 0; What are the differences between those two snippets?

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消