Что означает (myVar && foo ()) в JavaScript? - PullRequest
6 голосов
/ 12 января 2010
(myVar && foo())

Что означает приведенный выше код? Что это эквивалентно?

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

Ответы [ 5 ]

8 голосов
/ 12 января 2010

Выражение оценивается как myvar, если myvar неверно, и foo(), если myvar верно. Следующие фрагменты почти идентичны.

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

if(myvar){ var x = foo(); } else { var x = myvar; }
4 голосов
/ 12 января 2010

это выражение, которое приравнивается к "если myVar не равен false, запустите функцию foo ()". Если он используется так: var x = (myVar && foo()), результат будет:

если myVar не равен false, для x будет задан вывод foo (). если myVar равен false, то для x будет установлено значение myVar.

3 голосов
/ 12 января 2010

Функция foo () будет вызываться, только если myVar не равен falsey : это означает, что она не может быть ложной, "", 0, нулевой или неопределенной. (Есть другие?)

Более типично видеть такой пример:

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

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

"Если переменная 'window' имеет член с именем 'console' ..."

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

"... вызвать метод 'log' для объекта 'console'."

1 голос
/ 12 января 2010

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

if (myVar) {
    foo();
}

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

edit: Обратите внимание, что var x = a && b();, вероятно, не такая уж плохая идея в определенных контекстах. Однако (a && b()) само по себе неверно в нескольких отношениях. (вставка точки с запятой, выражение выражения, кроме того, что оно семантически загадочное)

0 голосов
/ 12 января 2010

при оценке && сначала выполняется оценка левой руки, т. Е. myVar, если это правда, тогда оценивается только правая сторона, т.е. Это связано с тем, что в выражении A && B, если A равно false, выражение A && B всегда будет иметь значение false.

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

var x = myVar && foo();

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

if myVar is truee x = foo(), else x = false
...