Coffeescript was a bit different. It meant fewer lines of code, not more. It had significant whitespace and some other Python-inspired idioms like array comprehensions and object comprehensions. Most importantly, Coffeescript was a new language and didn't have to re-implement deleterious Javascript features like the == vs === distinction, undeclared vars leaking to global scope, baroque keywords like "with", etc...
That said as others have pointed out, ES6 did borrow many good features from CS and CS is slowly dying. Fortunately other languages like Elm and, to a lesser degree, Reason have offered even more compelling "footgun free" alternatives.
Modern JS has standard HoFs (on arrays) and an iteration protocol.
> undeclared vars leaking to global scope
Strict mode (which syntactic ES6 features enable by default e.g. class contents are in strict mode always).
> baroque keywords like "with"
Which can trivially be linted away.
> ES6 did borrow many good features from CS
Not really from CS, rather from similar (much older) sources CS got them from.
https://gist.github.com/sleepyfox/1879845
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...
Neither of these is a claim I made so I'm not sure why you feel the need to point these out.
However native HoF obviate much of the need for comprehensions, especially combined with terser "arrow functions". Languages like Smalltalk or Ruby do just fine without comprehensions for instance.
EDIT: My mistake. I learned something today.
CS developers sometimes define variables because of hoisting.
Obviously, variables are defined. In CS they are simply defined for you automatically. That said, you can obviously do it yourself if you want. But you will not be able to use additional tooling around `let` and `const`
Currently works with Flow syntax, but not yet the actual flow checker - would love help making that happen!