Почему javascript принимает запятые в операторах if? - PullRequest
59 голосов
/ 18 марта 2011

Я наткнулся на какой-то синтаксис javascript, который, казалось, должен вызывать какую-то ошибку синтаксического разбора, но не:

if (true, true) {console.log('splendid')} else {console.log('horrid')} // splendid
if (true, false) {console.log('splendid')} else {console.log('horrid')} // horrid

Кажется, только последнее выражение влияет на логику, хотя все выражения выполняются:

if  (console.log('super'), true) {console.log('splendid')} // super splendid

Кто-нибудь знает, почему это правильный синтаксис JavaScript? Есть ли практическое применение для этого?

Ответы [ 4 ]

56 голосов
/ 18 марта 2011

Оператор запятой объединяет несколько выражений вместе, и результатом операции является значение последнего операнда.Единственное реальное использование для этого - когда вам нужно, чтобы возникало несколько побочных эффектов, таких как назначение или вызов функции.

33 голосов
/ 18 марта 2011

Оператор запятой оценивает каждый из своих операндов (слева направо) и возвращает значение последнего операнда.

https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Special_Operators/Comma_Operator

https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Expressions_and_Operators#comma_operator

15 голосов
/ 18 марта 2011

запятые в javascript на самом деле довольно загадочные.Самое крутое использование, которое я видел, это

while(doSomething(), checkIfSomethingHappened());

, наиболее распространенным было бы использование var в современном js

var foo = 1,
    bar = 2;
.
7 голосов
/ 18 марта 2011

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

int x,y;
for(x = 0, y = 0; x < 10 || y < 100; x++, y++) {
....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...