為什麼在 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”未定義,並且……

<!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 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.