嚴格模式(Strict Mode)是一種運行模式,它提供了一種更加嚴格的語法和錯誤檢查,以幫助開發者編寫更可靠、更規范的代碼。
-
什么是嚴格模式:
嚴格模式是一種 JavaScript 的執行模式,通過啟用嚴格模式,可以對一些不規范或潛在的問題進行檢測,并禁用一些不安全的語言特性,以提高代碼質量和可維護性。 -
開啟嚴格模式:
在腳本文件或函數的開頭添加"use strict";
字符串,即可開啟嚴格模式。例如:"use strict"; // 嚴格模式下的代碼
-
嚴格模式和普通模式的區別:
- 變量必須聲明:在嚴格模式下,變量必須使用
var
、let
或const
進行聲明,否則會拋出錯誤。而在普通模式下,未聲明的變量會被隱式創建為全局變量。 - 刪除變量和不可寫(不允許刪除的 / 不存在的)屬性:在嚴格模式下,無法刪除不可寫的變量(使用
delete
操作符),會拋出錯誤。而在普通模式下,刪除不可寫屬性的操作會靜默失敗(不會給出任何提示)。 - 禁止重復的函數參數名:在嚴格模式下,函數聲明中禁止使用重復的參數名,否則會拋出錯誤。而在普通模式下,重復的參數名會被忽略。
- 對象不能有重名屬性(ES6 已不存在此問題)。
- 禁止使用八進制字面量:在嚴格模式下,八進制字面量(以0開頭的數字)將被視為語法錯誤。而在普通模式下,八進制字面量會被解析為對應的十進制數。
- 函數內部
this
值為undefined
:在嚴格模式下,函數內部的this
值為undefined
,而不是默認指向全局對象(如瀏覽器中的window
)。 - 創設 eval 作用域。嚴格模式下創設了 eval 作用域。正常模式下, eval 語句的作用域取決于它處再哪個作用域。嚴格模式下,eval 本身就是一個作用域,不能再生成全局作用域了,所生成的變量只能用于 eval 內部。
"use strict";var x = 2 // eval函數用于將給定的字符串作為JavaScript代碼執行 console.info(eval('var x = 5; x')) console.info(x) // 嚴格模式下,eval中的變量不會影響外部變量,所以為2;否則為5
- 保留字。嚴格模式新增的一些保留字:interface、let、package、private、static等,用于變量名將會報錯。
- 變量必須聲明:在嚴格模式下,變量必須使用
使用嚴格模式的優點:
- 消除JavaScript語法的一些不合理、不嚴謹之處,減少一些怪異行為
- 消除代碼運行的一些不安全之處,保證代碼運行的安全
- 提高編譯器效率,增加運行速度
- 為未來新版本的Javascript做好鋪墊