Является <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, чтобы продемонстрировать (с небольшими изменениями).