This isn't an issue for node projects as you can simply `require` the `coffee-script/register` module and node handles coffee scripts for you via normal `requires`.
* Optional braces and parenthesis. Results in visually cleaner and more compact code, especially when dealing with large objects.
* Requiring backticks to do string interpolation seems like an ugly hack.
* CS uses dots to slice and splice ranges:
host?.split(".")[-1..][0] == "dns"
BTW, notice in the example above two additional CS features that don't exist in ES6:* The existential operator `?` soaks up null/undefined references.
* `==` is compiled to `===`
* Expressions always return a value in CS, just like in Lisp, so no need to explicitly `return`
* Block strings and regular expressions.
And more: http://coffeescript.org/
Plus, CS just seems like it's always a step ahead of JS. In using it, you can code in a more intelligently designed language that enforces best-practices better than JS does. Doing so supports diversity, innovations (after all, many of these ES6 features are obviously inspired by CS).
Why abandon such a wonderful language when it still has so much to offer, and at the same time seems to be driving innovation in JavaScript itself?
This seemingly minor feature is so huge for me. Accessing deep objects?.is?.a?.horrible?.pain?.sometimes?()
It's a syntactic convenience, but it leads to questionable patterns. Do you really want to silently collapse the hierarchy of whatever was null? I'd rather identify it and fail with a specific message or behavior rather than generically.