Является <boolean expression> && statement() таким же, как if (<boolean expression>) statement()?

Являются ли эти два идентичных?

Предположим, что у вас есть:

var x = true;

И у вас есть один из них:

x && doSomething();

или

if(x) doSomething();

Есть ли какой-либо различий между двумя синтаксисами? Я наткнулся на хороший кусочек сахара?

Ответ 1

Строго говоря, они будут давать одинаковые результаты, но если вы используете первый случай как условие для чего-то другого, вы получите разные результаты. Это происходит потому, что в случае x && doSomething() , doSomething() вернет значение, чтобы обозначить его успех.

Ответ 2

Нет, они не идентичны. Пока if является оператором, оператор AND является выражением.

Это означает, что вы можете использовать его результат в другом выражении, которое вы не можете с помощью if-statement:

var result = x && doSomething();

Тем не менее, в вашем случае оба эффекта имеют одинаковый эффект. Используйте тот, который более читабельен и лучше отражает вашу структуру программы; Я бы рекомендовал if-statement.

Ответ 3

Короткий ответ: Нет

Длинный ответ:

A, заявленный @Steve x && doSomething(), является выражением ,

тогда как if(x) doSomething(); является оператором ,

Как предложил @Даниэль Ли и @Берги, подумайте:

  • вычисляется выражение (предполагается вернуть значение здесь).

  • объявлен оператор (не), чтобы вернуть значение здесь, подумайте побочные эффекты > ).

Почему это запутывает?

  • JS позволяет написать ( thatExpression );
  • JS позволяет писать thatExpression;

оба предполагают какой-то оператор doNothingWithValueOf.

Как выбрать?

Используете ли вы:

  • doSomething() как
    • подумайте IsMyObjectWhatever() или MyObjectComputedValue(),
    • или как утверждение, подумайте ModifyMyObject()

И затем: используете ли вы x && doSomething() выражение ?

В итоге вы будете думать о чем-то вроде thisStatement( thatExpression );, подумайте:

  • () выражение,
  • ;.

Тогда почему я должен выбирать?

Ответ 4

В слове нет, два утверждения не равны, хотя в конкретных обстоятельствах вы представляете результат одинаковым.

x && doSomething(); - выражение, сначала оценивается x, потому что это AND, и поскольку x является истинным, тогда вычисляется второй аргумент (doSomething()). В этом случае это означает, что метод выполняется. Если x были ложными, то doSomething() не будет выполняться, поскольку результат выражения не может быть правдой.

if(x) doSomething(); - это утверждение. Значение x проверяется, и если оно истинно, выполняется область действия оператора if.

Я собрал этот fiddle, чтобы продемонстрировать (с небольшими изменениями).