JavaScript 保留字
JavaScript 保留字
Section titled “JavaScript 保留字”在 JavaScript 中,某些标识符(identifiers)是保留字。这些词语在语言中有特殊含义,不能用作变量、函数、标签或类的名称。
JavaScript 标准 (ECMAScript)
Section titled “JavaScript 标准 (ECMAScript)”JavaScript 由 ECMA International 组织标准化,命名为 ECMAScript。该语言多年来发展迅速:
- ECMAScript 3 (ES3, 1999): 较旧 JavaScript 版本的基础,得到广泛支持。
- ECMAScript 5 (ES5, 2009): 引入了重要改进,如严格模式(strict mode)、JSON 支持和新的 Array 方法。所有现代浏览器都完全支持。
- ECMAScript 6 (ES6) / ECMAScript 2015 (ES2015): 一次重大更新,引入了如
let和const、箭头函数(arrow functions)、类(classes)、模块(modules)、Promise、模板字面量(template literals)等特性。这是现代 JavaScript 开发的基础。 - 年度发布 (ES2016+): 自 ES2015 以来,ECMAScript 采用了年度发布周期,每年引入少量新特性(例如 ES2016、ES2017 等)。现代浏览器持续更新其 JavaScript 引擎以支持这些新特性。
如今编写 JavaScript 时,通常可以假定现代浏览器支持 ES2015 及许多更新的特性。对于旧环境或更广泛的兼容性需求,可以使用 Babel 等转译器(transpilers)将现代 JavaScript 代码转换为旧的、兼容性更好的版本。
JavaScript 保留字 (ECMAScript 2015 及以后版本)
Section titled “JavaScript 保留字 (ECMAScript 2015 及以后版本)”以下是现代 JavaScript 中的保留字列表。你不能将它们用作标识符:
await (仅在 async 函数中)
break
case
catch
class
const
continue
debugger
default
delete
do
else
enum (仍是保留字,但当前 JS 未使用)
export
extends
false
finally
for
function
if
import
in
instanceof
new
null
return
super
switch
this
throw
true
try
typeof
var
void
while
with
yield (仅在 generator 函数中)
在严格模式下保留(以及模块,模块默认就是严格模式):
Section titled “在严格模式下保留(以及模块,模块默认就是严格模式):”implements
interface
let
package
private
protected
public
static
注意:arguments 和 eval 并非严格意义上的保留字,但它们有特殊行为,在严格模式下不应作为变量或函数名称使用,并且通常应避免作为标识符。
避免命名冲突
Section titled “避免命名冲突”除了保留字之外,避免使用 JavaScript 内置对象(built-in objects)、属性(properties)和方法的名称作为你自己的标识符,也是一种良好的实践,可以防止混淆和潜在错误。
应谨慎使用的内置标识符示例:
Array
Date
Error
Function
Infinity
JSON
Math
NaN
Number
Object
Promise
Proxy
Reflect
RegExp
String
Symbol
Map
Set
WeakMap
WeakSet
Intl
console
document (在浏览器环境中)
window (在浏览器环境中)
isNaN
isFinite
parseFloat
parseInt
undefined
hasOwnProperty
toString
valueOf
HTML 和 DOM 相关标识符
Section titled “HTML 和 DOM 相关标识符”当 JavaScript 在浏览器中运行时,全局变量(global variables)是 window 对象的属性。许多 HTML 元素的 ID 或名称也可能成为 window 上的全局属性(尽管依赖这种行为被认为是糟糕的实践)。最好避免使用常见的 HTML 标签名、属性、事件处理程序(event handler)名称,或 window、document 及其他 DOM 对象的属性作为你的全局变量名。
HTML 事件处理程序名称示例(避免将它们直接通过属性指定为函数名称,例如 onclick="myFunction()" 与 let onclick = ... 是不同的):
onabort
onblur
onclick
onerror
onfocus
onkeydown
onkeypress
onkeyup
onload
onmousedown
onmousemove
onmouseout
onmouseover
onmouseup
onreset
onresize
onscroll
onsubmit
onunload
现代变量声明:let 和 const
Section titled “现代变量声明:let 和 const”let 和 const 是在 ECMAScript 2015 (ES6) 中引入的,它们是现代 JavaScript 中声明变量的标准方式,很大程度上取代了 var。
let: 声明一个块级作用域(block-scoped)的局部变量,可以选择性地初始化一个值。用let声明的变量可以被重新赋值。const: 声明一个块级作用域(block-scoped)的只读命名常量。这意味着变量的标识符不能被重新赋值。对于用const声明的对象和数组,它们的属性或元素仍然可以被修改,但变量本身不能被设置为引用不同的对象或数组。
使用 let 和 const 有助于避免与 var 相关的常见问题(如提升(hoisting)怪异行为和仅函数作用域),并带来更易维护、更可预测的代码。它们在所有现代 JavaScript 环境中都得到了完全支持。
const PI = 3.14159; // 不能被重新赋值// PI = 3; // 这将导致错误
let counter = 0;counter = counter + 1; // 允许
if (true) { const blockScopedVar = "I'm inside the block"; console.log(blockScopedVar);}// console.log(blockScopedVar); // 错误:blockScopedVar 未在块外部定义