Javascript的细节(五):保留字
发表于更新于阅读时长 1 分钟报菜名
JS 的保留字可以分为以下几类,翻译参考 MDN
1. 普通保留字
什么情况下都是保留字。保留字不能被用作标识符,例如下文中的
js
const foo = function bar() {}
foo 和 bar 就是标识符,他们会在所处的作用域中产生新的绑定。
注意,从 ES2015(ES6)开始,保留字可以被用作对象的属性
js
const a = {const: 1}
在 ES5 时代就必须写成
js
const a = {['const']: 1}
break
case
catch
class
const
continue
debugger
default
delete
do
else
export
extends
finally
for
function
if
import
in
instanceof
new
return
super
switch
this
throw
try
typeof
var
void
while
with
此外,enum
尽管没有语法意义,但可能在未来的某一时刻加上,因此被称为未来保留字。
2. 严格模式保留字
仅在当前函数,模块或者脚本的开头有use strict
指令时是保留字。此外,class 中的代码也是严格模式。
let
static
yield
在模块以及 async 函数中,await
也是保留字,这是为了 TLA(top level await)预备的。注意模块代码必定是严格模式。而在生成器函数中,yield
也是保留字。
以下几个虽然目前没有在任何语法中用到,但是为了将来考虑,也在严格模式下是保留字。
implements
interface
package
private
protected
public
3. ES3 时代的保留字
有一些保留字,尽管在 ES 1-3 标准里被规定为未来保留字,但在之后也并没有用上,因此被移除出标准。通常来源于 java。
abstract
boolean
byte
char
double
final
float
goto
int
long
native
short
synchronized
transient
volatile
虽然 IE 7 声称是遵循 ES3 规范的,但是经过测试在 IE 7 中仍然可以使用这些保留字作为标识符
4. 不可被用作标识符的关键字
null
,true
和false
,尽管不是保留字,但永远会被识别为直接量,因此不能用作标识符。
在严格模式下,对eval
和arguments
的绑定会抛出错误,因此它们也不能用作标识符
尽管非严格模式下var let
是合法的,但let let
仍然是错误。