why is class a reserved word in JavaScript?

It's reserved to future-proof ECMAScript

The following words are used as keywords in proposed extensions and are therefore reserved to allow for the possibility of future adoption of those extensions.

Don't fret though, if you're using best-practices in your JavaScripts, you're placing all accessible functions/variables/constructors in a namespace, which will allow you to use whatever name you'd like:

foo = {};
foo['class'] = function(){...code...};
var myClass = new foo['class']();

Languages evolve. It is prudent to reserve a few keywords that might come in use later. According to the ECMA standard, class is a Future Reserved Word.

If you did not reserve them, introducing new keywords could conflict with existing code (which already might be using the word for other things). Happened with Java and assert.


Now it's used in ECMAScript® 2015 Language Specification:

class Foo {
    constructor(bar) {
        this.bar = bar;
    }
}
new Foo(10).bar; // 10

class is reserved as a future keyword by the ECMAScript specification

Reserved Words - MDN


It is there so that support can be added in future without breaking existing programs. Please take a look at the following post.

You can also look at

https://developer.mozilla.org/en/JavaScript/Reference/Reserved_Words