JavaScript嚴格模式use strict的介紹
目錄
- 1.概述
- 1.1嚴格模式是什麼
- 1.2嚴格模式的目的
- 2.開啟嚴格模式
- 2.1全域性開啟嚴格模式
- 2.2區域性開啟嚴格模式
- 3.嚴格模式中的變數
- 3.1禁止意外建立變數
- 3.2靜默失敗轉為異常
- 3.3禁用delete關鍵字
- 3.4對變數名的限制
- 4.嚴格模式中的物件
- 4.1不可刪除的屬性
- 4.2只讀屬性的賦值
- 4.3不可擴充套件的物件
- 5.嚴格模式中的函式
- 5.1引數名必須唯一
- 5.2awww.cppcns.comrguments的不同
- 5.3arguments.callee屬性
- 5.4函式宣告的限制
- 6.增加eval()作用域
- 7.抑制this
1.概述
1.1嚴格模式是什麼
嚴格模式是中的一種限制性更強的變種方式。嚴格模式並不是
Script
雖然說現在大部分瀏覽器都已經支援嚴格模式,但是還是有部分老版本的瀏覽器不支援嚴格模式,所以不要在未經嚴格模式特性測試情況下使用嚴格模式。
JavaScript
中的嚴格模式與非嚴格模式可以共存,所以在中可以選擇性的加入嚴格模式。
1.2嚴格模式的目的
使用嚴格模式的目的如下所示:
首先,嚴格模式會將JavaScript
陷阱直接變成明顯的錯誤。
其次,嚴格模式修正了一些引擎難以優化的錯誤:同樣的程式碼有些時候嚴格模式會比非嚴格模式下更快。
嚴格模式禁用了一些可能在未來版本定義的語法。
2.開啟嚴格模式
JavaScript
中開啟嚴格模式分為兩種,分別是全域性開啟嚴格模式和區域性開啟嚴格模式。
2.1全域性開啟嚴格模式
開啟全域性嚴格模式只需要在所有的程式碼前面輸入一段字串,字串如下:
"use strict";//或者'use strict';
需要注意的是,如果之前的JavaScript
程式碼是非嚴格模式的話,建立是不要為這段程式碼開啟嚴格模式,這樣可能會出現問題。建議先從區域性開啟嚴格模式,一步一步的調整程式碼。
2.2區域性開啟嚴格模式
區域性開啟嚴格模式可以在某個指定的函式中的第一行加入"use strict
";這段字串,這個函式體外還是非嚴格模式。
開啟嚴格模式的例項程式碼如下所示:
//全域性開啟嚴格模式 //"use strict" v = 100 console.log(v) function fun() { //區域性開啟嚴格模式 'use strict' vv = 200 AEhtfaXozconsole.log(vv) } // fun() 丟擲異常 vv is not defined
3.嚴格模式中的變數
3.1禁止意外建立變數
所謂的意外建立變數就是指不使用var關鍵字宣告的變數。當在嚴格模式下,如果意外建立全域性變數,將會丟擲異常,
示例程式碼如下所示:
'use strict' //在非嚴格模式下,這樣建立變數將不會報錯,但是在嚴格模式下這樣建立變數將會丟擲異常 v = 100 console.log(v)
3.2靜默失敗轉為異常
所謂靜默失敗就是既不報錯也沒有任何效果,在嚴格模式下將會轉為異常。
3.3禁用delete關鍵字
在非嚴格模式下,對全域性變數使用delete關鍵字將會出現靜默失敗,而在嚴格模式下,將會丟擲異常,示例程式碼如下所示
'use strict' var v = 100 delete v // SyntaxError:Deleteofanunqualifiedidentifierinstrictmode. console.log(v)
3.4對變數名的限制
在嚴格模式下,JavaScript
對變數名也有限制,特別是不能使用保留字作為變數名,使用保留字作為符作為變數名會導致語法錯誤。
4.嚴格模式中的物件
4.1不可刪除的屬性
在www.cppcns.com非嚴格模式下,對不可刪除的屬性使用delete
關鍵字將會出現靜默失敗,而在嚴格模式下,將會丟擲異常。
示例程式碼如下所示:
"use strict" delete Object.prototype;//丟擲異常
4.2只讀屬性的賦值
在非嚴格模式下,對一個只讀的屬性進行賦值操將會靜默失敗,但是在嚴格模式下將會丟擲異常,示例程式碼如下:
'use strict' var obj = {} Object.defineProperty(obj,'name',{ value: '一碗粥',}) obj.name = '一碗周' //丟擲異常
4.3不可擴充套件的物件
在非嚴格模式下,為不可擴充套件的物件新增新的屬性將會靜默失敗,而在嚴格模式下將會丟擲異常。
示例程式碼如下所示:
//開啟全域性嚴格模式 'use strict' var obj = {} //將悐變成不可擴充套件的 Object.preventExtensions(obj) //為物件擴充套件屬性 obj.name = '一碗周' // 丟擲異常
5.嚴格模式中的函式
5.1引數名必須唯一
在非嚴格模式下,函式的形參可以重複,但是在嚴格模式中,如果函式的形參重複將會丟擲異常,示例程式碼如下所示:
'use strict' function fun(a,a,b) { console.log(a + a + b) } /* *非嚴格模式下結果為7=2+2+3 *嚴格模式下將會丟擲異常 */ fun(1,2,3)
5.2arguments的不同
在嚴格模式和非嚴格模式中,arguments
物件的行為是不同的
具體不同如下所示:
- 在非嚴格模式下,修改實參的值會也會反映到
arguments
物件中。 - 在嚴格模式下,命名引數與‘
arguments'
物件是完全獨立的。
示例程式碼如下所示:
'use strict' function fun(v) { v = '100' console.log(v) console.log(arguments[0]) } /* *在非嚴格模式中列印的結果為100,100 *在嚴格模式中列印的結果為100,200 */ fun(200)
5.3arguments.callee屬性
在非嚴格模式中的可以使用arguments.callee
屬性,結果為當前函式名稱,而在嚴格模式中,使用此屬性將會丟擲異常。
示例程式碼如下:
'usestrict' functionfun(){ console.log(arguments.callee); } fun()//丟擲異常
5.4函式宣告的限制
在嚴格模式下,只能在全域性作用域和區域性作用域中宣告函式,除這兩種作用域外宣告函式語法是錯誤的(例如if語句塊)。
示例程式碼如下所示:
'use strict' function fun() { console.log(arguments.callee) } fun() //丟擲異常
6.增加eval()作用域
在嚴格模式下,使用eval()
函式建立的變數只能在函式內部使用。
在外部使用將會丟擲異常,示例程式碼如下:
'use strict' eval('var v=100') console.log(v) //丟擲異常
7.抑制this
在非嚴格模式下使用Fucntion
的apply()
或者call()
方法時,null
或者undefined
值會被轉換為全域性物件。而嚴格模式下,函式的this
值始終是指定的值。
示例程式碼如下所示:
//開啟嚴格模式 'use strict' var v = 100 function fn() { console.log(this.v) } var obj = { v: 200,} fn.call(obj) //this指向全域性www.cppcns.com物件
結語:
本篇文章基本將嚴格模式的所有情況大致都有所介紹,解決日常開發中關於嚴格模式的問題足以應對。
到此這篇關於JavaScript
嚴格模式use strict
的介紹的文章就介紹到這了,更多相關JavaScript嚴格模式use strict內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!