I agree with the author of this post. What is interesting for me is how people are happy to use an intermediate layer in front of javascript just to gain some syntax and not real semantics. CoffeeScript does not really change the complexity of your program. I agree that in modern languages it is a good idea to avoid all this parens and useless syntax that we have in Javascript, ObjectiveC, and so forth, and I hope ne…
Leaving features off the table and just talking about semantic cleanups, here's a few:
* Switch statement doesn't fall-through by default.
* Variables don't need to be declared with "var", and can't ever become global accidentally.
* Equality is strict, using `===`, if you want coercive equality, you coerce the object yourself.
* Loops that are used to generate functions close over their index variables, so that all inner functions don't share the final value of the index. This is the same problem that ECMAScript Harmony introduces "let" to solve.
* Splats largely replace use of the "arguments" object, so you don't get bit by "arguments" only being a faux-array.
* Comparisons can be chained, as in Python -- so you can write: "100 > x > 25", and have the answer be correct.
* Multiline strings are valid without having to escape the newline.
* And the big one: everything in CoffeeScript is an expression. Without having to use temporary variables, you can return the result of an if/else from a function, pass a comprehension (loop) directly into a function call, assign the result of a try/catch, and so on.