Почему javascript принимает запятые в операторах if?
Я наткнулся на какой-то синтаксис 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? Есть ли практическое применение для этого?
Ответы
Ответ 1
Оператор запятой объединяет несколько выражений вместе, а результатом операции является значение последнего операнда. Единственное реальное использование для него - это когда вам нужно несколько побочных эффектов, таких как назначение или вызовы функций.
Ответ 2
Оператор запятой оценивает каждый из своих операндов (слева направо) и возвращает значение последнего операнда.
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
Ответ 3
запятые в javascript на самом деле довольно загадочны. Самое крутое использование, которое я видел, это
while(doSomething(), checkIfSomethingHappened());
наиболее распространенным было бы использование var в современных js
var foo = 1,
bar = 2;
Ответ 4
Это также то же самое, что и в большинстве других языков программирования, где у вас может быть несколько итераторов в цикле.
int x,y;
for(x = 0, y = 0; x < 10 || y < 100; x++, y++) {
....
}