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指令时是保留字。此外,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. 不可被用作标识符的关键字

nulltruefalse,尽管不是保留字,但永远会被识别为直接量,因此不能用作标识符。

在严格模式下,对evalarguments的绑定会抛出错误,因此它们也不能用作标识符

尽管非严格模式下var let是合法的,但let let仍然是错误。

© 2016 - 2024Austaras Devas