Javascript的细节(五):保留字
发表于更新于阅读时长 1 分钟报菜名
JS 的保留字可以分为以下几类,翻译参考 MDN
1. 普通保留字
什么情况下都是保留字。保留字不能被用作标识符,例如下文中的
jsconst foo = function bar() {}
foo 和 bar 就是标识符,他们会在所处的作用域中产生新的绑定。
注意,从 ES2015(ES6)开始,保留字可以被用作对象的属性
jsconst a = {const: 1}
在 ES5 时代就必须写成
jsconst a = {['const']: 1}
breakcasecatchclassconstcontinuedebuggerdefaultdeletedoelseexportextendsfinallyforfunctionifimportininstanceofnewreturnsuperswitchthisthrowtrytypeofvarvoidwhilewith
此外,enum尽管没有语法意义,但可能在未来的某一时刻加上,因此被称为未来保留字。
2. 严格模式保留字
仅在当前函数,模块或者脚本的开头有use strict指令时是保留字。此外,class 中的代码也是严格模式。
letstaticyield
在模块以及 async 函数中,await也是保留字,这是为了 TLA(top level await)预备的。注意模块代码必定是严格模式。而在生成器函数中,yield也是保留字。
以下几个虽然目前没有在任何语法中用到,但是为了将来考虑,也在严格模式下是保留字。
implementsinterfacepackageprivateprotectedpublic
3. ES3 时代的保留字
有一些保留字,尽管在 ES 1-3 标准里被规定为未来保留字,但在之后也并没有用上,因此被移除出标准。通常来源于 java。
abstractbooleanbytechardoublefinalfloatgotointlongnativeshortsynchronizedtransientvolatile
虽然 IE 7 声称是遵循 ES3 规范的,但是经过测试在 IE 7 中仍然可以使用这些保留字作为标识符
4. 不可被用作标识符的关键字
null,true和false,尽管不是保留字,但永远会被识别为直接量,因此不能用作标识符。
在严格模式下,对eval和arguments的绑定会抛出错误,因此它们也不能用作标识符
尽管非严格模式下var let是合法的,但let let仍然是错误。