"use strict"
使用"use strict"指令的目的是說明(腳本或函數(shù)中)后續(xù)的代碼將會(huì)解析為嚴(yán)格代碼(strict code)。
如果頂層(不在任何函數(shù)體內(nèi))代碼使用了"use strict" 指令,那么他們就是嚴(yán)格代碼。
如果函數(shù)體定義所處的代碼是嚴(yán)格代碼或者函數(shù)體使用了"use strict"指令,那么函數(shù)體的代碼也是嚴(yán)格代碼。
嚴(yán)格代碼以嚴(yán)格模式執(zhí)行。ECMAScript5中的嚴(yán)格模式是該語言的一個(gè)受限制的子集,它修正了語言的重要缺陷,并提供健壯的查錯(cuò)功能和增強(qiáng)的安全機(jī)制。
@嚴(yán)格模式和非嚴(yán)格模式之間的區(qū)別如下:
*在嚴(yán)格模式中禁止使用with語句
*在嚴(yán)格模式中,所有的變量都要先聲明,如果給一個(gè)未聲明的變量、函數(shù)、函數(shù)參數(shù)、 catch從句參數(shù)或全局對象的屬性賦值,將會(huì)拋出一個(gè)引用錯(cuò)誤異常(在非嚴(yán)格模式中,這種隱式聲明的全局變量的方法是給全局對象新添加一個(gè)新屬性)。
*在嚴(yán)格模式中,調(diào)用的函數(shù)(不是方法)中的一個(gè)this值是undefined。(在非嚴(yán)格模式中, 調(diào)用的函數(shù)中的this值總是全局對象)。
可以利用這種特性來判斷JavaScript實(shí)現(xiàn)是否支持嚴(yán)格模式:
var hasStrictMode = (function(){"use strict";retuen this===undefined}());
*同樣,在嚴(yán)格模式中,當(dāng)通過call()或apply()來調(diào)用函數(shù)中時(shí),其中this值就是通過call()或apply()傳入的第一個(gè)參數(shù)(在非嚴(yán)格模式中,null和undefined值被全局對象和轉(zhuǎn)換為對象的非對象值所替代)
*在嚴(yán)格模式中,給只讀屬性賦值和給不可擴(kuò)展的對象創(chuàng)建新成員都將拋出一個(gè)類型錯(cuò)誤異常(在非嚴(yán)格模式中,這些操作只是簡單地操作失敗,不會(huì)報(bào)錯(cuò))。
*在嚴(yán)格模式中,傳入eval()的代碼不能在調(diào)用程序所在的上下文中聲明變量或定義函數(shù),而在非嚴(yán)格模式中是可以這樣做的。相反,變量和函數(shù)的定義是在eval()創(chuàng)建的新作用域中,這個(gè)作用域是在eval()返回時(shí)就棄用了。
*在嚴(yán)格模式中,函數(shù)里的arguments對象擁有傳入函數(shù)值的靜態(tài)副本。在非嚴(yán)格模式中,arguments對象具有“魔術(shù)般”的行為,arguments里的數(shù)組元素和函數(shù)參數(shù)都是指向同一個(gè)值的引用。
*在嚴(yán)格模式中,當(dāng)delete運(yùn)算符后跟隨非法的標(biāo)識(shí)符(比如變量、函數(shù)、函數(shù)參數(shù))時(shí),將會(huì)拋出一個(gè)語法錯(cuò)誤異常(在非嚴(yán)格模式中,這種delete表達(dá)式什么也沒做,并返回false)。
*在嚴(yán)格模式中,試圖刪除一個(gè)不可配置的屬性將拋出一個(gè)類型錯(cuò)誤異常(在非嚴(yán)格模式中,delete表達(dá)式操作失敗,并返回false)。
*在嚴(yán)格模式中,在一個(gè)對象直接量中定義兩個(gè)或多個(gè)同名屬性將產(chǎn)生一個(gè)語法錯(cuò)誤(在非嚴(yán)格模式下不會(huì)報(bào)錯(cuò))
*在嚴(yán)格模式中,函數(shù)聲明中存在兩個(gè)或多個(gè)同名的參數(shù)將產(chǎn)生一個(gè)語法錯(cuò)誤(在非嚴(yán)格模式中不會(huì)報(bào)錯(cuò))
*在嚴(yán)格模式中是不允許使用八進(jìn)制整數(shù)直接量(以0位前綴,而不是0x為前綴)的(在非嚴(yán)格模式中某些實(shí)現(xiàn)是允許八進(jìn)制整數(shù)直接量的)
*在嚴(yán)格模式中,標(biāo)識(shí)符eval和arguments當(dāng)做關(guān)鍵字,它們的值是不能更改的。不能給這些標(biāo)識(shí)符賦值,也不能把它們聲明為變量、用做函數(shù)名、用做函數(shù)參數(shù)或用做catch快的標(biāo)識(shí)符。
*在嚴(yán)格模式中限制了對調(diào)用棧的檢測能力,在嚴(yán)格模式的函數(shù)中,arguments.caller和arguments.callee都會(huì)拋出一個(gè)類型錯(cuò)誤異常。嚴(yán)格模式的函數(shù)同樣具有caller和arguments屬性,當(dāng)訪問這兩個(gè)屬性時(shí)將拋出類型錯(cuò)誤異常(有一些JavaScript的實(shí)現(xiàn)在非嚴(yán)格模式里定義了這些非標(biāo)準(zhǔn)的屬性)
js嚴(yán)格模式簡單了解及與非嚴(yán)格模式的區(qū)別
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 一、概述 除了正常運(yùn)行模式,ECMAscript 5添加了第二種運(yùn)行模式:"嚴(yán)格模式"(strict mode)。...
- 一、概述 除了正常運(yùn)行模式,ECMAscript 5添加了第二種運(yùn)行模式:"嚴(yán)格模式"(strict mode)。...
- 轉(zhuǎn)自:腳本之家 轉(zhuǎn)載 時(shí)間:2016-09-24我要評論 在 JavaScript 的嚴(yán)格模式下,對 JavaSc...
- 因要重現(xiàn)是不是在無索引的情況下 讀寫量過大導(dǎo)致的數(shù)據(jù)庫假死,需要對數(shù)據(jù)庫做個(gè)壓力測試。 工具:Jmeter環(huán)境:m...