JavaScript 中的保留关键字

IT技术 javascript reserved-words
2021-02-08 07:43:55

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

6个回答

这是我的诗,其中包含 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.
这首诗堪称传奇!但不幸的是,包含的词在 ES3(字节、长等)中被保留,在 ES5、ES6 和下一个版本中不再保留。
2021-03-16 07:43:55
怎么样yield
2021-03-25 07:43:55

我们应该链接到实际的信息来源,而不仅仅是谷歌热门搜索。

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

JScript 8.0:http : //msdn.microsoft.com/en-us/library/ttyab5c8.aspx

要补充benc 的回答,请参阅标准 ECMA-262这些是官方保留字,但只有学究无视执行以尊重标准。有关最流行的实现(即 firefox 和 Internet Explorer)的保留字,请参阅 benc 的回答。

EMCAScript-262 中的保留字是Keyword s、Future Reserved Word s、NullLiteralBooleanLiteral s,其中关键字

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
ES5 规范和 ES6 草案中都没有提到“抽象”未来保留字。那个是从哪里来的?
2021-03-22 07:43:55
找到了!它作为未来的保留字出现在 ES3 中,以及一长串其他保留字,但在 ES5 中被删除。
2021-03-30 07:43:55
约瑟夫,感谢您添加该信息。我在 google 中找到了那个 PDF,但没有时间打开和阅读所有内容。
2021-04-05 07:43:55
这是怎样的回答。它甚至不押韵。
2021-04-07 07:43:55
let在这里看不到,但我在文档中看到:ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf
2021-04-10 07:43:55

我刚刚在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 .

“保留以备将来使用”:: 所有 Java 词...真的很懒惰。
2021-03-15 07:43:55
请注意,“保留”与“预初始化”不同。在浏览器中,alert已经初始化,但没有什么可以阻止您重新分配alert = 5. 但是,您不能设置window为 5,但可以将其用作局部变量。这对于保留关键字是不可能的,将来使用,null, false, true
2021-03-23 07:43:55
yield我的快速检查错过更多投票的答案,所以我+1。这些可以在 ES5.1 中通过严格模式激活:implements interface let package private protected public static yield
2021-03-30 07:43:55
在脚本中使用位置并得到非常奇怪的行为,非常有用的帖子。
2021-03-31 07:43:55

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

function isReservedKeyword(wordToCheck) {
    var reservedWord = false;
    if (/^[a-z]+$/.test(wordToCheck)) {
        try {
            eval('var ' + wordToCheck + ' = 1');
        } catch (error) {
            reservedWord = true;
        }
    }
    return reservedWord;
}
这对于在构建时运行的测试用例来说是完美的,只要它不是您在运行时暴露的东西,它就完全有效。
2021-03-27 07:43:55
如果您必须将其eval用于任何事情,则很可能意味着您做错了。
2021-04-09 07:43:55