Full disclosure: Google employee
As an engineer that's written a lot of (old-skool) JS, Java, Obj-C, C++, and PHP, it is a real pleasure to develop web frontends with Dart.
Immutable Data Structures: Not out-of-the-box but we use the BuiltValue[0]/BuiltCollection[1] libraries extensively internally
Functional Programming: Dart's Iterable[2] and Stream[3] classes have all the standard higher-order functions, like map, filter/where, reduce, fold, etc.
Type System: With Dart 2.0[4], the type system is really great. Expressive with good type-inference, support for generic types, mixins, & typedefs. It's actually better than Java, IMO.
Also, the async story is fantastic! JS has caught up with Dart in some areas recently but Futures, Streams, async/await, & async*/yield, have long been first-class members of the Dart language.[5]
[0]: https://github.com/google/built_value.dart
[1]: https://github.com/google/built_collection.dart
[2]: https://api.dartlang.org/stable/2.7.0/dart-core/Iterable-cla...
[3]: https://api.dartlang.org/stable/2.7.0/dart-async/Stream-clas...
[4]: https://dart.dev/dart-2
[5]: https://dart.dev/codelabs/async-await