为什么我们在 JavaScript 中使用“use strict”?


“use strict”是一个指令,它是一个文字表达式。它是在 JavaScript 1.8.5 中引入的。顾名思义,“use strict”表示代码将在严格模式下执行。

使用“use strict”的益处

  • 更容易编写“安全”的 JavaScript 代码。

  • 它将以前被接受的“不良语法”更改为真正的错误。例如,变量名输入错误会创建一个新的全局变量。在使用严格模式时,这将抛出一个错误。这导致无法意外地创建全局变量。

  • 程序员不会收到任何关于为不可写属性赋值的错误反馈。

  • 但在严格模式下,任何对不可写属性、只读属性、不存在的属性、不存在的变量或不存在的对象的赋值都将抛出一个错误。

要声明严格模式,请在开头添加关键字“use strict”。对于全局范围,请在脚本开头声明它。

我们可以为整个脚本、函数或模块声明严格模式。

在严格模式下,以下内容不允许 -

  • 使用未定义的变量或对象。

  • 删除变量、对象或函数。

  • 参数名称重复。

  • 写入只读或只读属性。

  • 删除不可删除的属性。

  • 使用“eval”和“arguments”作为变量。

  • with 语句。

让我们借助示例来了解上述情况。

未定义的变量或对象

在严格模式下不允许使用未定义的变量或对象。

"use strict";
a = 1; // this will throw an error because a is not defined

示例 1

在下面的程序中,变量“a”未定义,并且处于严格模式。

<!DOCTYPE html>
<html>
   <body>
   <p>An error would come, since you have used a variable, but forgot to declare it
   </p>
   <p>Press F8 to see the error. </p>
   <script>
      "use strict";
      a = 1;
   </script>
</body>
</html>

输出

在成功执行上述代码后,它将产生以下结果 -

An error would come, since you have used a variable, but forgot to declare it
Press F8 to see the error.

并且我们在控制台中收到以下错误消息 -

删除变量、对象或函数

在严格模式下,不允许删除变量、对象或函数。当尝试删除它们时,它将显示错误。

"use strict";
Let a = 1;
delete a; // this will throw an error

示例 2

在下面的程序中,变量“a”未定义,并且 i

<!DOCTYPE html>
<html>
   <body>
      <script>
         "use strict";
         let a = 1.02;
         delete a;
      </script>
   </body>
</html>

输出

在成功执行上述代码后,我们在控制台中收到以下错误消息 -

参数名称重复

在严格模式下,不允许参数名称重复。当尝试使用两个或多个参数的相同名称时,它将显示错误。

"use strict";
function f(x, x) {}; // this will throw an error

示例

在下面的程序中,函数 f 的参数重复,而处于严格模式。

<!DOCTYPE html>
<html>
   <body>
      <script>
         "use strict";
         function f(x, x) {};
      </script>
   </body>
</html>

输出

在成功执行上述代码后,我们在控制台中收到以下错误消息 -

写入只读或只读属性

在严格模式下,不允许写入不可写(只读)或只读属性。当尝试写入只读或只读属性时,它将显示错误。

示例

在下面的程序中,属性 z 不可写,我们尝试为其赋值,这会显示错误。

<!DOCTYPE html>
<html>
   <body>
      <script>
         "use strict";
         const obj = {};
         Object.defineProperty(obj, "z", {writable:false});
         obj.z = 2; // This will cause an error
      </script>
   </body>
</html>

输出

在成功执行上述代码后,我们在控制台中收到以下错误消息 -

示例 - 删除不可删除的属性

在严格模式下,不允许删除不可删除的属性。在下面的程序中,我们尝试删除 Object 的“prototype”属性。

<!DOCTYPE html>
<html>
   <body>
      <script>
         "use strict";
         delete Object.prototype;
      </script>
   </body>
</html>

输出

在成功执行上述代码后,我们在控制台中收到以下错误消息 -

示例 - 使用“eval”和“arguments”作为变量

在严格模式下,不允许使用“eval”和“arguments”作为变量。

在下面的程序中,我们尝试使用“eval”作为变量。

<!DOCTYPE html>
<html>
   <body>
      <script>
         "use strict";
         let eval = 2.45;
      </script>
   </body>
</html>

输出

这将产生以下结果 -

示例 - with 语句

在严格模式下,不允许使用 with 语句。

<!DOCTYPE html>
<html>
   <body>
      <script>
         "use strict";
         with (Math){x = sin(0)};
      </script>
   </body>
</html>

输出

这将产生以下结果 -

更新于: 2022年4月20日

623 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告