Разница между if (x) {foo ();} и х?foo (): 0; - PullRequest
4 голосов
/ 03 декабря 2010

Фрагмент 1:

if ( x ) { 
    foo();
}

Фрагмент 2:

x ? foo() : 0;  

Каковы различия между этими двумя фрагментами?

Редактировать: Исправлена ​​ошибка синтаксиса.

Обновление : кстати, похоже, что есть еще более короткая запись:

x && foo();

Ответы [ 3 ]

8 голосов
/ 03 декабря 2010

Фрагмент # 2 является недопустимым выражением ECMAScript, так как ему не хватает необходимого : blah для того, чтобы сделать его троичным.

РЕДАКТИРОВАТЬ: Нет никакой разницы между двумя фрагментами, они оба вызывают foo, если x верно. Если x является ложным (undefined / false / пустая строка / 0 /), то первый фрагмент не будет ничего оценивать, последний фрагмент будет иметь значение 0, но это 0 действительно не влияет на сценарий.

3 голосов
/ 03 декабря 2010

Я думаю, что вы хотели спросить следующее

// Why should I use
if (x) {
  do();
}

// instead of 
x && do();

или

// Why should I use
if (x) {
  do(); 
} else {
  dont();
}

//instead of 
x ? do() : dont()

Поскольку они написаны, нет никакой разницы в выводе.Мне не нравится использовать троичный или оператор && в этих случаях из-за семантики использования троичного и &&.Тернар возвращает значение, которое вы не используете, как и выражение &&.Поэтому я предпочел бы использовать способ, которым язык предназначен для использования операторов.

Тем не менее, я люблю использовать && для проверки на ноль

var val = obj && obj.getValue();

Обратите внимание, что в этом случае мы используемвозвращаемое значение выражения

1 голос
/ 03 декабря 2010

Как правило, if является оператором (например, вы не можете присвоить его переменной), а троичный оператор ?: является частью выражения (возвращает значение, которое может быть присвоено переменным).

Кроме того, блок if может содержать операторы, а компоненты ?: могут содержать только выражения.

В приведенном вами примере нет никакой разницы, поскольку вы не используете результатиз ?:.Оба фрагмента оценивают foo(), только если x является истинным значением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...