Javascript的细节(五): 保留字
发表于更新于阅读时长 1 分钟报菜名
JS 的保留字可以分为以下几类,翻译参考 MDN
1. 普通保留字
什么情况下都是保留字。保留字不能被用作标识符,例如下文中的
const foo = function bar() {}
foo 和 bar。
注意,从 ES2015(ES6)开始,保留字可以被用作对象的属性
const a = {
const: 1
}
在 ES5 时代就必须写成
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
情况下是保留字。
implements
interface
let
package
private
protected
public
static
yield
此外在模块代码(比如 type='module' 的 script 标签)中,await
也是保留字,这是为了 TLA(top level await)预备的。注意模块代码必定是严格模式。
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
仍然是错误。