Что делает (нечто myVar && ()) означают в JavaScript?

(myVar && foo())

Что делает вышеупомянутый средний код? Чему это эквивалентно?

Я думаю, что это работает на одной строке.

6
задан hammar 19 August 2011 в 22:16
поделиться

5 ответов

Экспрессия оценивается в MyVar , если Myvar является foody, а foo () , если Myvar это правда. Следующие фрагменты почти идентичны.

var x = (myvar && foo());

if(myvar){ var x = foo(); } else { var x = myvar; }
8
ответ дан 8 December 2019 в 14:43
поделиться

Функция foo () будет называться только если myvar не falsey : Знакомствование Это не может быть ложным, "", 0, null или undefined. (Любые другие?)

Это более типично видеть пример, как это:

window.console && console.log("some helpful debug info");

Это интерпретируется следующим образом ...

«Если переменная« окна »имеет элемент под названием« консоль »...»

(Важно префиксировать «консоль» с «окном». «Поскольку, если консоль не определена, вы получите ошибку JavaScript вместо false.)

» «Объект консоли». »

3
ответ дан 8 December 2019 в 14:43
поделиться

Это выражение, которое приравнивается к «если Myvar не является достойным, запустить функцию foo ()». Если это используется так: var x = (myvar && foo ()) , результат будет:

Если MyVar не является falsey, X будет установлен на вывод FOO (). Если Myvar нестрый, то X будет установлен на значение myvar.

4
ответ дан 8 December 2019 в 14:43
поделиться

Выражение является умным использованием короткого замыкания в логических выражениях. foo () будет выполняться только если Myvar оценит на true .

if (myVar) {
    foo();
}

гораздо яснее. Вероятно, есть случаи, когда этот код имеет смысл, но стиль Checkers (если вы заинтересованы в такого рода), бросят на него. Смотри http://javascript.crockford.com/code.html . Это хорошая практика, чтобы избежать полагаться на операторы вставки и экспрессии Semicolon.

Редактировать: обратите внимание, что var x = a && b (); , вероятно, не такая плохая идея в определенных контекстах. Однако (A && B ()) сам по себе неверно не так. (Semicolon Insertion, Expression Explation, кроме семантически Cryptic)

1
ответ дан 8 December 2019 в 14:43
поделиться

Когда && оцениваются левой рукой, оценивается сначала I.e. Myvar , если это правда, то только правая сторона оценивается точкой I.E. foo () . Это связано с тем, что в операторе A && B, если A является ложным, то выражение A && B всегда будет оценивать до false.

Вышеуказанное утверждение обычно используется следующим образом:

var x = myVar && foo();

Это также можно записать как:

if myVar is truee x = foo(), else x = false
0
ответ дан 8 December 2019 в 14:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: