JavaScript中的保留关键字


Answers:



1476

这是我的诗,其中包含JavaScript中所有保留的关键字,专门针对那些当下诚实的人,而不仅仅是尝试得分:

Let this long package float, 
Goto private class if short.
While protected with debugger case,  
Continue volatile interface.
Instanceof super synchronized throw, 
Extends final export throws.  

Try import double enum?  
- False, boolean, abstract function, 
Implements typeof transient break!
Void static, default do,  
Switch int native new. 
Else, delete null public var 
In return for const, true, char
…Finally catch byte.


61

要补充benc的答案,请参阅标准ECMA-262。这些是官方保留字,但只有学徒会忽略实现以尊重标准。有关最受欢迎的实现(即Firefox和Internet Explorer)的保留字,请参阅benc的答案。

EMCAScript-262中的保留字是关键字将来的保留字NullLiteralBooleanLiteral,其中关键字

break     do        instanceof  typeof
case      else      new         var
catch     finally   return      void
continue  for       switch      while
debugger  function  this        with
default   if        throw
delete    in        try

未来的保留字 s为

abstract  export      interface  static
boolean   extends     long       super
byte      final       native     synchronized
char      float       package    throws
class     goto        private    transient
const     implements  protected  volatile
double    import      public 
enum      int         short

NullLiteral

null

BooleanLiteral

true
false

约瑟夫,感谢您添加该信息。我在Google中找到了PDF,但没有时间打开和阅读所有内容。
08年

ES5规范和ES6草案均未提及“抽象的”将来保留字。那个是从哪里来的?
弗拉基米尔·潘捷列夫

2
找到了!它作为将来的保留字出现在ES3中,并带有一长串其他字,但在ES5中已删除。
弗拉基米尔·潘捷列夫

13
这是什么样的答案。它甚至没有韵。
朱斯

1
let在这里看不到,但在文档中看到了它:ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
prosti

20

我刚刚在JavaScript和jQuery中阅读了此内容:The Missing Manual

并非所有这些保留字都会在所有浏览器中引起问题,但是在命名变量时最好避免使用这些名称。

JavaScript关键字: break, case, catch, continue, debugger, default, delete, do, else, false, finally, for, function, if, in, instanceof, new, null, return, switch, this, throw, true, try, typeof, var, void, while, with

保留以供将来使用: abstract, boolean, byte, char, class, const, double, enum, export, extends, final, float, goto, implements, import, int, interface, let, long, native, package, private, protected, public, short, static, super, synchronized, throws, transient, volatile, yield

浏览器中的预定义全局变量: alert, blur, closed, document, focus, frames, history, innerHeight, innerWidth, length, location, navigator, open, outerHeight, outerWidth, parent, screen, screenX, screenY, statusbar, window


在脚本中使用了位置,并得到了非常奇怪的行为,非常有用的帖子。
alimack

2
“保留以供将来使用” ::所有Java单词……真的很懒。
Eddie B

2
请注意,“保留”与“预初始化”不同。在浏览器中,alert已经初始化,但是没有什么阻止您重新分配alert = 5。但是,您不能将其设置window为5,但可以将其用作局部变量。这是不可能的保留关键字,将来使用nullfalsetrue
Ruben Verborgh 2014年

yield我的快速检查错过了更多投票答案,因此我+1了。这些可以在ES5.1中通过严格模式激活:implements interface let package private protected public static yield

5

这是一种与浏览器和语言版本无关的方法,用于确定JavaScript引擎是否将特定字符串视为关键字。归功于此答案,它提供了解决方案的核心。

function isReservedKeyword(wordToCheck) {
    var reservedWord = false;
    if (/^[a-z]+$/.test(wordToCheck)) {
        try {
            eval('var ' + wordToCheck + ' = 1');
        } catch (error) {
            reservedWord = true;
        }
    }
    return reservedWord;
}

7
如果您必须使用eval任何东西,则很可能意味着您做错了。
SeinopSys

8
这对于在构建时运行的测试用例是完美的,只要它不是您在运行时公开的,就完全有效。
阿卜杜拉·吉巴利

3

当前的答案都没有警告说,无论ES-Dialect如何,浏览器都倾向于在ES指令之上拥有自己的保留关键字,方法等列表。

例如,IE9禁止使用逻辑名称,例如:addFilterremoveFilter(其中包括保留方法)。

看到 特定于IE9的更广泛的“当前已知”列表, http://www.jabcreations.com/blog/internet-explorer-9。我尚未在msdn(或其他地方)上找到任何官方引用。


1

这是Eloquent JavaScript书中的列表:

  • break
  • case
  • catch
  • class
  • const
  • continue
  • debugger
  • default
  • delete
  • do
  • else
  • enum
  • export
  • extend
  • false
  • finally
  • for
  • function
  • if
  • implements
  • import
  • in
  • instanceof
  • interface
  • let
  • new
  • null
  • package
  • private
  • protected
  • public
  • return
  • static
  • super
  • switch
  • this
  • throw
  • true
  • try
  • typeof
  • var
  • void
  • while
  • with
  • yield

-1

benc的回答非常好,但是我花了两美分,就喜欢这里的w3schools页面:

http://www.w3schools.com/js/js_reserved.asp

除了列出该标准保留的关键字外,它还包含一长串在某些情况下避免使用的关键字。例如,alert编写要在浏览器中运行的代码时不使用名称。它帮助我弄清楚了为什么某些单词在我的编辑器中被突出显示为关键字,即使我知道它们不是关键字。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.