JavaScript嚴(yán)格模式use strict的介紹
1.概述
1.1嚴(yán)格模式是什么
嚴(yán)格模式是JavaScript
中的一種限制性更強(qiáng)的變種方式。嚴(yán)格模式并不是JavaScript
中的子集,它在語義上與正常的代碼有明顯的差異。
雖然說現(xiàn)在大部分瀏覽器都已經(jīng)支持嚴(yán)格模式,但是還是有部分老版本的瀏覽器不支持嚴(yán)格模式,所以不要在未經(jīng)嚴(yán)格模式特性測試情況下使用嚴(yán)格模式。
JavaScript
中的嚴(yán)格模式與非嚴(yán)格模式可以共存,所以在腳本中可以選擇性的加入嚴(yán)格模式。
1.2嚴(yán)格模式的目的
使用嚴(yán)格模式的目的如下所示:
首先,嚴(yán)格模式會將JavaScript
陷阱直接變成明顯的錯誤。
其次,嚴(yán)格模式修正了一些引擎難以優(yōu)化的錯誤:同樣的代碼有些時候嚴(yán)格模式會比非嚴(yán)格模式下更快。
嚴(yán)格模式禁用了一些可能在未來版本定義的語法。
2.開啟嚴(yán)格模式
JavaScript
中開啟嚴(yán)格模式分為兩種,分別是全局開啟嚴(yán)格模式和局部開啟嚴(yán)格模式。
2.1全局開啟嚴(yán)格模式
開啟全局嚴(yán)格模式只需要在所有的代碼前面輸入一段字符串,字符串如下:
"use strict";//或者'use strict';
需要注意的是,如果之前的JavaScript
代碼是非嚴(yán)格模式的話,建立是不要為這段代碼開啟嚴(yán)格模式,這樣可能會出現(xiàn)問題。建議先從局部開啟嚴(yán)格模式,一步一步的調(diào)整代碼。
2.2局部開啟嚴(yán)格模式
局部開啟嚴(yán)格模式可以在某個指定的函數(shù)中的第一行加入"use strict
";這段字符串,這個函數(shù)體外還是非嚴(yán)格模式。
開啟嚴(yán)格模式的實(shí)例代碼如下所示:
//全局開啟嚴(yán)格模式 //"use strict" v = 100 console.log(v) function fun() { //局部開啟嚴(yán)格模式 'use strict' vv = 200 console.log(vv) } // fun() 拋出異常 vv is not defined
3.嚴(yán)格模式中的變量
3.1禁止意外創(chuàng)建變量
所謂的意外創(chuàng)建變量就是指不使用var關(guān)鍵字聲明的變量。當(dāng)在嚴(yán)格模式下,如果意外創(chuàng)建全局變量,將會拋出異常,
示例代碼如下所示:
'use strict' //在非嚴(yán)格模式下,這樣創(chuàng)建變量將不會報(bào)錯,但是在嚴(yán)格模式下這樣創(chuàng)建變量將會拋出異常 v = 100 console.log(v)
3.2靜默失敗轉(zhuǎn)為異常
所謂靜默失敗就是既不報(bào)錯也沒有任何效果,在嚴(yán)格模式下將會轉(zhuǎn)為異常。
3.3禁用delete關(guān)鍵字
在非嚴(yán)格模式下,對全局變量使用delete關(guān)鍵字將會出現(xiàn)靜默失敗,而在嚴(yán)格模式下,將會拋出異常,示例代碼如下所示
'use strict' var v = 100 delete v // SyntaxError:Deleteofanunqualifiedidentifierinstrictmode. console.log(v)
3.4對變量名的限制
在嚴(yán)格模式下,JavaScript
對變量名也有限制,特別是不能使用保留字作為變量名,使用保留字作為符作為變量名會導(dǎo)致語法錯誤。
4.嚴(yán)格模式中的對象
4.1不可刪除的屬性
在非嚴(yán)格模式下,對不可刪除的屬性使用delete
關(guān)鍵字將會出現(xiàn)靜默失敗,而在嚴(yán)格模式下,將會拋出異常。
示例代碼如下所示:
"use strict" delete Object.prototype;//拋出異常
4.2只讀屬性的賦值
在非嚴(yán)格模式下,對一個只讀的屬性進(jìn)行賦值操將會靜默失敗,但是在嚴(yán)格模式下將會拋出異常,示例代碼如下:
'use strict' var obj = {} Object.defineProperty(obj, 'name', { value: '一碗粥', }) obj.name = '一碗周' //拋出異常
4.3不可擴(kuò)展的對象
在非嚴(yán)格模式下,為不可擴(kuò)展的對象添加新的屬性將會靜默失敗,而在嚴(yán)格模式下將會拋出異常。
示例代碼如下所示:
//開啟全局嚴(yán)格模式 'use strict' var obj = {} //將悐變成不可擴(kuò)展的 Object.preventExtensions(obj) //為對象擴(kuò)展屬性 obj.name = '一碗周' // 拋出異常
5.嚴(yán)格模式中的函數(shù)
5.1參數(shù)名必須唯一
在非嚴(yán)格模式下,函數(shù)的形參可以重復(fù),但是在嚴(yán)格模式中,如果函數(shù)的形參重復(fù)將會拋出異常,示例代碼如下所示:
'use strict' function fun(a, a, b) { console.log(a + a + b) } /* *非嚴(yán)格模式下結(jié)果為7=2+2+3 *嚴(yán)格模式下將會拋出異常 */ fun(1, 2, 3)
5.2arguments的不同
在嚴(yán)格模式和非嚴(yán)格模式中,arguments
對象的行為是不同的
具體不同如下所示:
- 在非嚴(yán)格模式下,修改實(shí)參的值會也會反映到
arguments
對象中。 - 在嚴(yán)格模式下,命名參數(shù)與‘
arguments'
對象是完全獨(dú)立的。
示例代碼如下所示:
'use strict' function fun(v) { v = '100' console.log(v) console.log(arguments[0]) } /* *在非嚴(yán)格模式中打印的結(jié)果為100,100 *在嚴(yán)格模式中打印的結(jié)果為100,200 */ fun(200)
5.3arguments.callee屬性
在非嚴(yán)格模式中的可以使用arguments.callee
屬性,結(jié)果為當(dāng)前函數(shù)名稱,而在嚴(yán)格模式中,使用此屬性將會拋出異常。
示例代碼如下:
'usestrict' functionfun(){ console.log(arguments.callee); } fun()//拋出異常
5.4函數(shù)聲明的限制
在嚴(yán)格模式下,只能在全局作用域和局部作用域中聲明函數(shù),除這兩種作用域外聲明函數(shù)語法是錯誤的(例如if語句塊)。
示例代碼如下所示:
'use strict' function fun() { console.log(arguments.callee) } fun() //拋出異常
6.增加eval()作用域
在嚴(yán)格模式下,使用eval()
函數(shù)創(chuàng)建的變量只能在函數(shù)內(nèi)部使用。
在外部使用將會拋出異常,示例代碼如下:
'use strict' eval('var v=100') console.log(v) //拋出異常
7.抑制this
在非嚴(yán)格模式下使用Fucntion
的apply()
或者call()
方法時,null
或者undefined
值會被轉(zhuǎn)換為全局對象。而嚴(yán)格模式下,函數(shù)的this
值始終是指定的值。
示例代碼如下所示:
//開啟嚴(yán)格模式 'use strict' var v = 100 function fn() { console.log(this.v) } var obj = { v: 200, } fn.call(obj) //this指向全局對象
結(jié)語:
本篇文章基本將嚴(yán)格模式的所有情況大致都有所介紹,解決日常開發(fā)中關(guān)于嚴(yán)格模式的問題足以應(yīng)對。
到此這篇關(guān)于JavaScript
嚴(yán)格模式use strict
的介紹的文章就介紹到這了,更多相關(guān)JavaScript嚴(yán)格模式use strict內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
umi插件開發(fā)仿dumi項(xiàng)目實(shí)現(xiàn)基礎(chǔ)路由解析
這篇文章主要為大家介紹了umi插件開發(fā)仿dumi項(xiàng)目實(shí)現(xiàn)基礎(chǔ)路由解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01document 和 document.all 分別什么時候用
document 和 document.all 分別什么時候用...2006-06-06JavaScript中使用toLocaleString數(shù)字格式化處理詳解
這篇文章主要為大家介紹了JavaScript中使用toLocaleString數(shù)字格式化處理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08微信小程序 定位到當(dāng)前城市實(shí)現(xiàn)實(shí)例代碼
這篇文章主要介紹了微信小程序 定位到當(dāng)前城市實(shí)現(xiàn)實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02微信小程序 倒計(jì)時組件實(shí)現(xiàn)代碼
這篇文章主要介紹了微信小程序 倒計(jì)時組件實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2016-10-10TypeScript對象解構(gòu)操作符在Spartacus實(shí)際項(xiàng)目開發(fā)中的應(yīng)用解析
這篇文章主要為大家介紹了TypeScript對象解構(gòu)操作符在Spartacus實(shí)際項(xiàng)目開發(fā)中的應(yīng)用解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07