There's a list of keywords, special strings, which may not be used as an Identifier. The main reason is that the parser would otherwise not be able to make the distinction. All these keywords are currently in use.
The keywords are: break, case, catch, continue, debugger, default, delete, do, else, finally, for, function, if, in, instanceof, new, return, switch, this, throw, try, typeof, var, void, while, with.
The future reserved words are: class, const, enum, export, extends, import, super.
The future reserved words while in strict mode are: implements, interface, let, package, private, protected, public, static, yield.
The latter is another inconsistency in the lexicon, related to regular expression literals. The CFG cannot possibly know which of the two versions of FutureReservedWord it should parse. It needs another parser to tell it what mode it is currently running in.
In my oppinion, they should have created a new production to harnas the new reserved words. However, in light of strict mode being a new introduced feature, any code that's built for strict mode will face more (possible) compatibility issues. It's also highly likely that such code is written with ES5 in mind, so there's little chance of these new words being used in such cases.