為什麼我們在 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 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.