21 comments

[ 4.1 ms ] story [ 75.9 ms ] thread
Reduces readability without reducing file-size. This belongs more on http://wtfjs.com/ .
Absolutely - I'd ask this to any interviewees claiming to be javascript experts but I'd never want to see it in production.
> I'd ask this to any interviewees claiming to be javascript experts but I'd never want to see it in production

That's a curious way to find programmers that are going to write code that you plan to use in production

The comma in its typical uses in variable assignment is pretty useless IMO.

    var x = 1,
        y = 2;
Destructuring lists would be a much more useful application

    var x, y = [1, 2];
or

    var tmp = [1, 2]
    ...
    var x, y = tmp;
would be far more useful.
> The comma in its typical uses in variable assignment is pretty useless IMO.

I've screwed myself over a few times by getting into the habit of using the comma in this fashion. If you accidentally make that comma a semicolon, y in your example becomes global. My jQuery plugins all include a default settings object, and they happen to have the same name of "settings". Consequently, default settings for some plugins were being overridden and I had no idea why - until I found that I used a semicolon instead of a comma.

The JavaScript Comma Operator: bringing perl-esque side-effects to your code since....wait, has this thing always been an available operator? Whatever. The JavaScript Comma Operator: bringing perl-esque side effects to your code since it's introduction. There. Ahem.
(comment deleted)

  lhs && rhs
  lhs || rhs
  lhs , rhs
Given the way js evaluates these, the comma operator seems like it should fit in nicely. I would have made this the first argument in my case for using the comma.
I guess this syntax will now enter my team code-style guideline, as forbidden. It will nice along the ?: used as a control structure instead of selection.
In hardware (Verilog), we use ?: all the time. Why not in JS?
The ternary operator has its uses, such as in assignment.

  var foo = bar ? a : b;
That's what he means by control structure instead of selection.
Why is this considered so ugly? Is this not the same operation as var x=1, y=2, z=3; which is very, very common for variable initialization?
Nope.

It's the same operation as in:

    for (a = 0, b = 1; ... ; ...)
No, the comma in the var statement is not an operator, just a delimiter. But if you did:

   var a = (1, b = 2, c = 3);
You would be using the comma operator. But that would be stupid.
Oh ffs did they have to copy all the retarded features of C's syntax into JS?
Not that useful in ordinary code, but useful in code-transformation because you can replace a single expression with multiple expressions.
The comma operator is a bad idea in most cases, but his idea of using it to unobtrusively insert a `console.log` debug statement inside an expression, is pretty clever and might actually be a sort of valid use for this language feature.

Also the way it allows one to formulate a `do { .. } while ( .. )` construction, is a nice and clever trick, but already violating the principle of least astonishment too much.