There are things about coffeescript that I just don't think are good ideas, like "unless" or "if" at the end. The person reading the code will think "Ok, now I'm doing x ... oh wait I'm not". the flow of it is just backwards.
The "myFunction(item) for item in array" syntax also seems wrong way around. You use "item" before you say what it is.
I'm not an expert. These are just initial impressions, but coffeescript seems to have some good ideas, but tries to do too much. It would be interesting to see what thought process went into deciding to include certain constructs. Was it just an experiment? Are there reasons that might persuade me?
Ultimately the better JavaScript is also going to be JavaScript.
The problem is we're mainly conditioned to expect the condition up front, notwithstanding Perl's initial slide down this slippery slope. Ugly syntax seems an argument for improving the syntax, not changing the grammar.
Does a language need three ways to say "if x do y" ? or maybe there's an "unless !x do y" construct and it's 4 ways.
This to me looks like going out of your way to have lots of ways to do the same thing. I never cared for it in PERL either.
The argument that "it reads like English" is not one that I like much - The history of making programming languages read like English is a long succession of dead ends. Programming languages work more like formal maths proofs than they do like English prose. Rather make the language readable on its own terms.
> The history of making programming languages read like English is a long succession of dead ends.
There certainly have been notable failures, such as Applescript, but I find it hard to dismiss Coffeescript, Ruby, SQL and FORTRAN which have all been quite popular.