JavaScript中的保留关键字

JavaScript中的保留关键字

Reserved keywords in JavaScript

保留了哪些JavaScript关键字(函数名称,变量等)?


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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.

我们应该链接到实际的信息来源,而不仅仅是热门的Google热门网站。

http://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Reserved_Words

JScript 8.0:
http://msdn.microsoft.com/zh-CN/library/ttyab5c8.aspx


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

EMCAScript-262中的保留字是关键字,将来的保留字,NullLiteral和BooleanLiterals,其中关键字是

1
2
3
4
5
6
7
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

未来保留字是

1
2
3
4
5
6
7
8
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是

1
null

和BooleanLiterals是

1
2
true
false

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

Not all of these reserved words will cause problems in all browsers, but it’s best to steer clear of these names when naming variables.

JavaScript keywords: 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.

Reserved for future use: 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.

Pre-defined global variables in the browser: alert, blur, closed, document, focus, frames, history, innerHeight, innerWidth, length, location, navigator, open, outerHeight, outerWidth, parent, screen, screenX, screenY, statusbar, window.


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

1
2
3
4
5
6
7
8
9
10
11
function isReservedKeyword(wordToCheck) {
    var reservedWord = false;
    if (/^[a-z]+$/.test(wordToCheck)) {
        try {
            eval('var ' + wordToCheck + ' = 1');
        } catch (error) {
            reservedWord = true;
        }
    }
    return reservedWord;
}

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

例如,IE9禁止使用诸如addFilterremoveFilter之类的逻辑名(其中,它们是保留的方法)。

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


这是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

benc的回答非常好,但是对于我的两分钱,我喜欢下面的w3schools页面:

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

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


推荐阅读