ECMAScript 2020: 学习 JavaScript 的 Strict Mode

在 JavaScript 中,我们经常会遇到一些不易察觉的错误,比如变量名的拼写错误、变量声明的遗漏、不安全的代码等等。为了避免这些错误,ECMAScript 引入了 Strict Mode(严格模式),它可以帮助我们在开发过程中更好地发现和解决这些问题。本文将介绍如何学习和使用 Strict Mode。

什么是 Strict Mode?

Strict Mode 是 ECMAScript 5 引入的一种严格模式,它可以让我们在代码中更加严谨地使用 JavaScript。在 Strict Mode 下,JavaScript 引擎会执行更加严格的代码检查,以便及早发现潜在的问题。严格模式不仅可以帮助我们避免一些常见的错误,而且还可以提高代码的可读性和可维护性。

如何启用 Strict Mode?

启用 Strict Mode 很简单,只需要在代码的开头添加如下语句即可:

---- --------

这个语句可以放在文件的开头,也可以放在函数的开头。如果放在函数的开头,那么只有在该函数内部才会启用 Strict Mode。

Strict Mode 的特性

Strict Mode 有很多特性,下面我们来逐一介绍。

变量必须先声明再使用

在 Strict Mode 下,变量必须先声明再使用。如果没有声明就使用变量,那么会抛出一个 ReferenceError 错误。这可以避免变量名的拼写错误和变量声明的遗漏。

---- --------

-- ----
--- - - --

-- --------
- - -- -- --------------- - -- --- -------

不能重复声明变量

在 Strict Mode 下,不能重复声明变量。如果重复声明了变量,那么会抛出一个 SyntaxError 错误。这可以避免变量名的重复定义。

---- --------

-- ----
--- - - --

-- ------
--- - - -- -- ------------ ---------- --- --- ------- ---- --------

函数必须声明在顶层作用域

在 Strict Mode 下,函数必须声明在顶层作用域。如果在非顶层作用域中声明函数,那么会抛出一个 SyntaxError 错误。这可以避免函数声明被错误地提升到顶层作用域。

---- --------

-- -----------
-------- ----- -
  -------------------
-

-- ------------
-- ------ -
  -------- ----- - -- ------------ -- ------ ---- ----- --------- --- ---- -- -------- -- --- ----- -- ------ - -----
    -------------------
  -
-

this 的值不能为全局对象

在 Strict Mode 下,this 的值不能为全局对象。如果在全局环境中使用 this,那么它的值会被设置为 undefined。这可以避免一些不安全的代码。

---- --------

-- -------- ----
------------------ -- ---------

禁止使用 with 语句

在 Strict Mode 下,禁止使用 with 语句。这是因为 with 语句会使代码更加难以理解和维护。

---- --------

-- -- ---- --
--- --- - - -- - --
---- ----- - -- ------------ ------ ---- ---- --- --- ------- - ---- ---------
  ---------------
-

总结

Strict Mode 是 ECMAScript 中的一种严格模式,它可以让我们在代码中更加严谨地使用 JavaScript。在 Strict Mode 下,JavaScript 引擎会执行更加严格的代码检查,以便及早发现潜在的问题。严格模式不仅可以帮助我们避免一些常见的错误,而且还可以提高代码的可读性和可维护性。我们可以通过在代码开头添加 'use strict'; 来启用 Strict Mode。在 Strict Mode 下,变量必须先声明再使用,不能重复声明变量,函数必须声明在顶层作用域,this 的值不能为全局对象,禁止使用 with 语句等等。我们应该在开发中尽可能地使用 Strict Mode,以提高代码的质量和可靠性。

示例代码

---- --------

-- ----
--- - - --

-- --------
- - -- -- --------------- - -- --- -------

-- ------
--- - - -- -- ------------ ---------- --- --- ------- ---- --------

-- ------------
-- ------ -
  -------- ----- - -- ------------ -- ------ ---- ----- --------- --- ---- -- -------- -- --- ----- -- ------ - -----
    -------------------
  -
-

-- -------- ----
------------------ -- ---------

-- -- ---- --
--- --- - - -- - --
---- ----- - -- ------------ ------ ---- ---- --- --- ------- - ---- ---------
  ---------------
-

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65fc152ed10417a22279d898