Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
The JavaScript Comma Operator (javascriptweblog.wordpress.com)
62 points by misterbwong on Sept 30, 2011 | hide | past | favorite | 19 comments


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 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.


To give credit where credit is due, Perl got the comma operator from C. A quick glance at their manuals suggests that neither BCPL (http://cm.bell-labs.com/who/dmr/bcpl.html) nor B (http://cm.bell-labs.com/cm/cs/who/dmr/kbman.html) had it.


  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.


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.


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.


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.


In hardware (Verilog), we use ?: all the time. Why not in JS?


Not that useful in ordinary code, but useful in code-transformation because you can replace a single expression with multiple expressions.


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.


Well, lucky for you in Javascript 1.7: https://developer.mozilla.org/en/New_in_JavaScript_1.7#Destr...

(though I kinda feel like panning syntax sugar as 'useless' is a little useless. What, are we going to count chars as a scientific comparison?)


even more excitingly, destructuring has been moved into the draft ECMAScript 6 spec:

http://wiki.ecmascript.org/doku.php?id=harmony:destructuring


> 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.


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?


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.


Nope.

It's the same operation as in:

    for (a = 0, b = 1; ... ; ...)




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: