Over a million developers have joined DZone.

Brendan Eich’s dream for the next version of JavaScript

DZone's Guide to

Brendan Eich’s dream for the next version of JavaScript

· Web Dev Zone
Free Resource

Learn how to build modern digital experience apps with Crafter CMS. Download this eBook now. Brought to you in partnership with Crafter Software

Harmony is the code name of the next version of JavaScript that is currently being worked on. Brendan Eich (the creator of JavaScript) outlines what his ideal Harmony would look like. Highlights:

  • Let as block-scoped var, const for constant variable declarations
  • Compact function syntax: function(x) { return x * x } becomes #(x) { x * x } (including an implicit return)
  • arguments is replaced by rest parameters and default arguments (see below).
  • Records: read-only objects (no Object.freeze()). #{x: 10, y: 20}
  • Tuples: read-only arrays with slicing and negative indices that access elements at the end. #[1, 2, 3][-1] → 3
  • Paren-free syntax for if.
  • Modules: The simple modules proposal will probably make it into Harmony.
  • Iteration: Lots of cool stuff, inspired by Python.

        for k in keys(o) { append(o[k]) }
        for v in values(o) { append(v) }
        for [k,v] in items(o) { append(k, v) }
        for x in o { append(x) }
        #sqgen(n) { for i in range(n) yield i*i } // a function
        return [i * i for i in range(n)]
        return (i * i for i in range(n))
  • Rest parameters: function printf(format, ...args) { ... }
  • Default parameter values: function add(left, right=1) {...}
  • Spread: the analog to rest parameters. f(...myArray)
  • Destructuring assignments for arrays and objects. The latter takes some getting used to.

        let [first, second] = sequence
        const {name, address, ...misc} = person  

My own wishes:

  • Self-style full prototypal inheritance (not much different from how JS is now).
  • Handle this like Lua: obj.method(a,b) should be syntactic sugar for m(obj, a, b) (where m is the function stored in obj.method).
  • Python-style keyword arguments (but I do agree with a comment made by Eich that destructuring makes them less urgent).
  • Turn "class methods” such as Object.keys() into instance methods: Instead of Object.keys(foo), I’d like to use foo.keys().
  • if statement: I would make braces mandatory and introduce an elsif keyword (could also be named else if)
  • Implicit returns: It would be nice if the same could be done for if-then-else (i.e., it becomes an expression). No more ternary if operator!
  • I’ve critiqued CoffeeScript’s syntax and compared it to JS without parens.

Crafter is a modern CMS platform for building modern websites and content-rich digital experiences. Download this eBook now. Brought to you in partnership with Crafter Software.


Published at DZone with permission of Axel Rauschmayer, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.


Dev Resources & Solutions Straight to Your Inbox

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.


{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}