ES7 introduced the exponentiation operator (**) and Array.prototype.includes() method. ES8 introduced async functions which allow asynchronous code to be written in a cleaner way using async and await keywords, shared memory and atomics to improve parallelism and concurrency between workers, and new methods like Object.entries() and Object.values(). Current proposals for ES9 include object destructuring with rest and spread properties, async iteration with for-await loops, and dynamic import() to load modules at runtime.