These days I am reading some javascript source codes,however I found some syntax that I can not understand.
1)the for-in loop
var c;
var obj={name:'test',age:33};
for(var e in c={},obj){
console.info(e+' = '+obj[e]);
}
2)The Conditional Operator (?:)
Generally,we use this operator this manner:
x > 0 ? x*y : -x*y
But I have seen some codes like this:
x > 0 ? (x*y,z=bar,..other expressoin) : (-x*y)
But it does not work if I change the comma to colon,it will throw a error.
In both cases, the comma operator [MDN] is used:
And the specification:
That just means that the result of the last expression is returned as result of the whole “list” of expressions.
In the examples you gave, it is used for its side effects [Wikipedia], namely evaluating every expression.
In general I’d say that this is not such a good style and, as you noticed, more difficult to understand.
is the same as
an does not seem to add any value. Even better would have been to just initialize
cin the first line:var c = {};.In case of the conditional operator: If
x > 0istrue, then all the expressions are evaluated and the result of the last expression is returned. In this case, using a normalifstatement would be better (easier to understand).Here again, the comma operator and maybe even the conditional operator seems to be used solely because of their side effects: Normally the conditional operator is supposed to only return a value but not to execute arbitrary expressions (a single function call which returns a value might be an exception).
As the MDN documentation says, it is more commonly used in a
forloop to initialize multiple variables: