JavaScript does not treat every keyword-like word the same way. The ECMAScript 2026 specification lists reserved words, but await and yield depend on parsing context; strict mode adds restrictions; and words such as async can still be identifiers. Use the categorized reference below rather than treating every familiar keyword as universally forbidden.
Reserved words: the central list
The ECMAScript 2026 Keywords and Reserved Words production lists these names:
await, break, case, catch, class, const, continue, debugger, default, delete, do, else, enum, export, extends, false, finally, for, function, if, import, in, instanceof, new, null, return, super, switch, this, throw, true, try, typeof, var, void, while, yield.
All entries except await and yield are unconditionally reserved. The exceptions are governed by grammar parameters and early-error rules, so check the relevant context before assuming they are always forbidden. The specification’s Identifiers and Early Errors section defines those context-specific restrictions.
#1 Best Overall
Names that depend on parsing context
await: async functions and modules
await is reserved inside async functions and in modules. In some Script contexts where the Await grammar parameter is absent, it can be an identifier. Whether a file is parsed as a module or a Script therefore affects the answer.
yield: generator grammar and strict mode
yield is controlled by the Yield grammar parameter and is restricted in strict mode. Its validity as an identifier depends on where it appears and which grammar rules apply; it is not accurately described by a single always-allowed or always-forbidden label.
Rank #2
Strict-mode identifier restrictions
Strict mode disallows additional names as identifiers. The specification classifies implements, interface, package, private, protected, and public as future reserved words in strict-mode code. It also restricts let and static as identifiers in strict mode. These are contextual restrictions, not unconditional additions to the ReservedWord production.
arguments and eval are not keywords, but strict mode restricts their use as binding identifiers. Do not add them to the reserved-word list; treat them as a separate strict-mode caution.
Do these 3 things before closing this tab:
1Scan for outdated or missing drivers - takes under a minute2Repair Windows errors before they cause bigger problems3Fix the driver behind crashes, sound loss and screen glitchesRank #3
Contextual keyword names that can be identifiers
These names can be identifiers, even though each has a keyword role in a particular grammar position:
asasyncfromgetmetaofsettarget
In particular, async is not reserved: it can be used as a variable name or statement label. “Keyword” describes a syntactic role; “reserved word” means a name cannot be used as an identifier. The terms are related, but not interchangeable.
Can Unicode escapes bypass a reserved word?
No. Writing a reserved spelling with Unicode escapes does not make it a valid identifier. The specification’s early-error checks compare the identifier’s normalized string value, so escaping the characters does not evade the restriction.
Quick Recap
Best Value
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

