Javascript - Тернарный оператор с несколькими заявлениями

Является ли это действующим JavaScript? Я видел пример, когда кто-то использовал запятые в тернарных условиях оператора, и он был отмечен как ошибка в моем редакторе, и пример не выполнялся в Chrome. Однако он работал в Firefox. После того, как я преобразовал все тернарные утверждения в операторы if/else, приложение запустилось в Chrome.

a!==b ? (a=1, b=2) : (a=2, b=1)

Edit:

Это фактический оператор в коде:

a!==0?b<0?(h=b/a,e=h-1,f=-2*b+2*a*e,i=-2*b+2*a*h,d=2*h*a-2*b-2*a):(h=b/a,e=h+1,f=2*b-2*a*e,i=2*b-2*a*h,d=-2*h*a+2*b):d=h=e=f=i=0

Ответ 1

Да, это действительно, и он отлично работает в Chrome:

var a, b, c;

a = 6;
b = 7;
c = a !== b ? (a = 1, b = 2) : (a = 2, b = 1);
console.log("a = " + a);
console.log("b = " + b);
console.log("c = " + c);

Ответ 2

Да:

a=1;
b=2;

a!==b ? (a=1, b=2) : (a=2, b=1)

console.log(a);     // 1
console.log(b);     // 2

и

a=1;
b=2;

a===b ? (a=1, b=2) : (a=2, b=1)

console.log(a);     // 2
console.log(b);     // 1

Как вы можете проанализировать, изменение оператора равенства корректно реагирует на наш тест, если вы посмотрите на результаты.

Ответ 3

Или вы можете сделать это:

b = a!==b ? (a=1,2) : (a=2,1);

Прочитайте здесь о запятой.

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