深入淺析JS中的嚴(yán)格模式
什么是嚴(yán)格模式?
使JS編碼更加規(guī)范化的模式,消除Javascript語(yǔ)法的一些不合理、不嚴(yán)謹(jǐn)之處,減少一些怪異行為
怎么使用?
直接添加下面的這句字符串就可以了,這種語(yǔ)法可以向后兼容,如果是不支持嚴(yán)格模式的javascript引擎,就會(huì)直接當(dāng)成是一個(gè)未賦值的字符串字面量,會(huì)直接忽略,支持的引擎就會(huì)開(kāi)啟嚴(yán)格模式
'use strict'
說(shuō)明:
1.在全局作用域使用的話,那整個(gè)js腳本就會(huì)開(kāi)啟這種模式
2.如果是只在函數(shù)內(nèi)部使用的話,那么就只是該函數(shù)內(nèi)部開(kāi)啟而已
function doSomething(){ 'use strict' // 其他代碼 }
變量
1. 在嚴(yán)格模式中什么時(shí)候創(chuàng)建變量以及怎么創(chuàng)建變量都是有限制的.首先,不允許意外創(chuàng)建全局變量.在非嚴(yán)格模式下是可以像下面這樣創(chuàng)建全局變量,但是嚴(yán)格模式中是不可以的
// 未聲明變量
// 非嚴(yán)格模式:創(chuàng)建全局變量
// 嚴(yán)格模式 :拋出referenceEror錯(cuò)誤
2.在嚴(yán)格模式下,對(duì)變量名也是有限制.特別的,不能使用implements,interface,let,package,private等保留字作為變量名,用這些變量命名的話,都會(huì)導(dǎo)出語(yǔ)法錯(cuò)誤
對(duì)象
在嚴(yán)格模式下 操作對(duì)象比在非嚴(yán)格模式下更容易導(dǎo)致錯(cuò)誤,下面幾種情形會(huì)導(dǎo)致語(yǔ)法錯(cuò)誤
1.為只讀屬性賦值會(huì)拋出TypeError
2.對(duì)不可配置的屬性使用delete 操作符會(huì)拋出TypeError
3.對(duì)不可擴(kuò)展的對(duì)象添加屬性會(huì)拋出TypeError
函數(shù)
在嚴(yán)格模式下,要求命名函數(shù)的參數(shù)必須是唯一的
// 重命名參數(shù)的 // 非嚴(yán)格模式:沒(méi)有錯(cuò)誤,只能訪問(wèn)第二個(gè)參數(shù),如果要訪問(wèn)第一個(gè)參數(shù),就必須通過(guò)arguments // 嚴(yán)格模式語(yǔ)法錯(cuò)誤 function sum(num,num){ //do something }
在嚴(yán)格模式下arguments對(duì)象的行為也有所不同.在嚴(yán)格模式下,修改命名參數(shù)的值也會(huì)反映到argument對(duì)象中,但是在嚴(yán)格模式下這兩個(gè)值是完全獨(dú)立的
function showValue(value){ value = 'foo' console.log(value) console.log(arguments[0]) // 非嚴(yán)格模式 : 'foo' 嚴(yán)格模式 :'hello' } showValu('hello')
函數(shù)
在嚴(yán)格模式中,函數(shù)的參數(shù)必須唯一
// 重名的參數(shù) // 非嚴(yán)格模式中,沒(méi)有錯(cuò)誤,只能訪問(wèn)第一個(gè)參數(shù) // 嚴(yán)格模式 :拋出錯(cuò)誤 Uncaught SyntaxError: Duplicate parameter name not allowed in this context function sum(num,num){ 'use strict' // do something }
arguments對(duì)象
在非嚴(yán)格模式中,修改命名參數(shù)的值也會(huì)反應(yīng)到arguments對(duì)象中,而嚴(yán)格模式坐下,這兩個(gè)值是完全獨(dú)立的
// 修改命名參數(shù)的值 // 非嚴(yán)格模式:修改會(huì)反應(yīng)到arguments中 // 嚴(yán)格模式中不會(huì)反應(yīng)到arguments中 function sum(num,num2){ 'use strict' num=3 console.log(arguments[0],num2)// 嚴(yán)格模式下輸出為1,2 非嚴(yán)格模式下輸出為3,2 } sum(1,2)
eval()
eval函數(shù)最大的變化就是他在包含上下文中不在創(chuàng)建變量或者函數(shù):
// 使用eval函數(shù)創(chuàng)建變量 // 非嚴(yán)格模式中:彈出框彈窗 20 // 嚴(yán)格模式中:調(diào)用alert(x)時(shí)報(bào)錯(cuò) function doSomething(){ eval('var x=20') alert(x) }
在嚴(yán)格模式中,可以在eval()中聲明變量和函數(shù),但這些邊行或者函數(shù)只能在被求值的特殊作用域中有效,隨后就將被銷(xiāo)毀,下面這段代碼執(zhí)行就是沒(méi)問(wèn)題的
'use strict' var result=eval('x=1,y=13;x+y') alert(result)
在這里,eval中聲明了變量x和y,然后將他們加在一起,反悔了他們的和,于是result變量的值就是21,即x+y的結(jié)果,在調(diào)用alert時(shí),盡管x和y已經(jīng)不存在了,result變量的值還是有效的
抑制this
在非嚴(yán)格模式下使用函數(shù)的apply()或則call()方法時(shí),null和undefined值會(huì)被轉(zhuǎn)換為全局對(duì)象,而在嚴(yán)格模式下,函數(shù)的this值始終是指定的值,無(wú)論指定的是什么值:
// 訪問(wèn)屬性 // 非嚴(yán)格模式:訪問(wèn)全局實(shí)行 // 嚴(yán)格模式:拋出錯(cuò)誤,因?yàn)閠his的值是null var color = "red"; function displayColor() { alert(this.color); } displayColor(null);
其他變化
在嚴(yán)格模式中with語(yǔ)句被拋棄掉了,在非嚴(yán)格模式中with語(yǔ)句能夠改變解析標(biāo)識(shí)符的路徑,但在嚴(yán)格模式下,with語(yǔ)句被簡(jiǎn)化掉了,因此,在嚴(yán)格模式下使用with語(yǔ)句是導(dǎo)致語(yǔ)法錯(cuò)誤
// with語(yǔ)句 // 非嚴(yán)格模式:允許 // 嚴(yán)格模式:拋出語(yǔ)法錯(cuò)誤 with (location) { console.log(href); }
總結(jié)
以上所述是小編給大家介紹的JS中的嚴(yán)格模式,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- JavaScript 引用類型實(shí)例詳解【數(shù)組、對(duì)象、嚴(yán)格模式等】
- JS嚴(yán)格模式原理與用法實(shí)例分析
- JavaScript 嚴(yán)格模式(use strict)用法實(shí)例分析
- javascript嚴(yán)格模式詳解(含嚴(yán)格模式與非嚴(yán)格模式的區(qū)別)
- 在JavaScript中使用嚴(yán)格模式(Strict Mode)
- JavaScript變量提升和嚴(yán)格模式實(shí)例分析
- JS嚴(yán)格模式知識(shí)點(diǎn)總結(jié)
- JavaScript嚴(yán)格模式下關(guān)于this的幾種指向詳解
- 深入理解javascript嚴(yán)格模式(Strict Mode)
- JavaScript嚴(yán)格模式不支持八進(jìn)制的問(wèn)題講解
相關(guān)文章
JS實(shí)現(xiàn)批量上傳文件并顯示進(jìn)度功能
這篇文章主要介紹了JS實(shí)現(xiàn)批量上傳文件并顯示進(jìn)度功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-06-06使用JavaScript實(shí)現(xiàn)旋轉(zhuǎn)的彩圈特效
這篇文章主要介紹了使用JavaScript實(shí)現(xiàn)旋轉(zhuǎn)的彩圈特效的相關(guān)資料,需要的朋友可以參考下2015-06-06Ext JS動(dòng)態(tài)加載JavaScript創(chuàng)建窗體的方法
這篇文章主要介紹了Ext JS動(dòng)態(tài)加載JavaScript創(chuàng)建窗體的方法 ,需要的朋友可以參考下2016-06-06原生JS實(shí)現(xiàn)的多個(gè)彩色小球跟隨鼠標(biāo)移動(dòng)動(dòng)畫(huà)效果示例
這篇文章主要介紹了原生JS實(shí)現(xiàn)的多個(gè)彩色小球跟隨鼠標(biāo)移動(dòng)動(dòng)畫(huà)效果,涉及javascript事件響應(yīng)、頁(yè)面元素屬性動(dòng)態(tài)修改及隨機(jī)數(shù)應(yīng)用等相關(guān)操作技巧,需要的朋友可以參考下2018-02-02