javaScript中的嚴格模式

語言: CN / TW / HK

持續創作,加速成長!這是我參與「掘金日新計劃 · 6 月更文挑戰」的第7天,點選檢視活動詳情

什麼是嚴格模式

JavaScript通常情況下隱式執行在正常模式-“Sloppy Mode”,ES5及其版本之後,javaScript可以顯示執行在嚴格模式-“Strict Mode”!在嚴格模式下。可以減少我們編寫不安全的JavaScript程式碼,獲得更加清大的錯誤檢查機制。為了向後相容,嚴格模式需要我們手動開啟!

如何使用

全文件用

如果我們需要對所有的JavaScript程式碼進行嚴格模式的限制,我們只需要在檔案頂部加上use strict就可以看了!請注意,這行程式碼需要瀏覽器支援ES5之後的JavaScript!

函式用

與全文件的用法類似,我們只需要在函式體的第一行加入use strict! function foo() { 'use strict'; ... }

嚴格模式下的程式碼

變數

嚴格模式靜止建立全域性變數,而不顯示的宣告他們! 例如下面的函式,在正常模式下並不會報錯!

function foo() { test = 123; } foo(); console.log(test);

image-20220606194823623

但是在嚴格模式下,因為我們沒有顯式的宣告test變數,此時會報錯!所以,我們需要事先使用var,let和const來申明變數!

image-20220606195304670

PS: 嚴格模式下,無法刪除變數

"use strict"; let test=0 delete test;

image-20220606195505823

函式

不允許重名形參名

這種情況基本也不會有人寫吧?正常情況下,我們都是編寫具有含義的變數名!

function sum(x, y, x) { return x + y + x; }

上面的程式碼,在正常模式下可以執行,最終的結果是後面的x覆蓋前面的x!如果是在嚴格模式下,則會直接直接報錯!

image-20220606195849868

arguments簡化

javascript function foo(){ console.log(arguments) } foo()

正常模式下:

image-20220606200036643

嚴格模式下:

與正常模式下的對比,你會發現屬性arguments.calleearguments.caller已經被棄用了!

image-20220606200145870

with不可用

八進位制數不可用

javascript "use strict"; console.log( 010 === 8)

image-20220606200945544

this在函式中未定義

請注意:這裡的函式時非方法函式!因為方法與物件掛鉤,有具體的this!

正常模式下,this通常時window物件!

function foo(){ console.log(this) }

image-20220606201157954

嚴格模式下,this時undefined