"use strict"
使用"use strict"指令的目的是說明(腳本或函數(shù)中)后續(xù)的代碼將會解析為嚴(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)格模式是該語言的一個受限制的子集,它修正了語言的重要缺陷外盯,并提供健壯的查錯功能和增強(qiáng)的安全機(jī)制摘盆。
@嚴(yán)格模式和非嚴(yán)格模式之間的區(qū)別如下:
*在嚴(yán)格模式中禁止使用with語句
*在嚴(yán)格模式中,所有的變量都要先聲明门怪,如果給一個未聲明的變量、函數(shù)锅纺、函數(shù)參數(shù)掷空、 catch從句參數(shù)或全局對象的屬性賦值,將會拋出一個引用錯誤異常(在非嚴(yán)格模式中,這種隱式聲明的全局變量的方法是給全局對象新添加一個新屬性)坦弟。
*在嚴(yán)格模式中护锤,調(diào)用的函數(shù)(不是方法)中的一個this值是undefined。(在非嚴(yán)格模式中酿傍, 調(diào)用的函數(shù)中的this值總是全局對象)烙懦。
可以利用這種特性來判斷JavaScript實現(xiàn)是否支持嚴(yán)格模式:
var hasStrictMode = (function(){"use strict";retuen this===undefined}());
*同樣,在嚴(yán)格模式中赤炒,當(dāng)通過call()或apply()來調(diào)用函數(shù)中時氯析,其中this值就是通過call()或apply()傳入的第一個參數(shù)(在非嚴(yán)格模式中,null和undefined值被全局對象和轉(zhuǎn)換為對象的非對象值所替代)
*在嚴(yán)格模式中莺褒,給只讀屬性賦值和給不可擴(kuò)展的對象創(chuàng)建新成員都將拋出一個類型錯誤異常(在非嚴(yán)格模式中,這些操作只是簡單地操作失敗掩缓,不會報錯)。
*在嚴(yán)格模式中遵岩,傳入eval()的代碼不能在調(diào)用程序所在的上下文中聲明變量或定義函數(shù)你辣,而在非嚴(yán)格模式中是可以這樣做的。相反尘执,變量和函數(shù)的定義是在eval()創(chuàng)建的新作用域中舍哄,這個作用域是在eval()返回時就棄用了。
*在嚴(yán)格模式中誊锭,函數(shù)里的arguments對象擁有傳入函數(shù)值的靜態(tài)副本表悬。在非嚴(yán)格模式中,arguments對象具有“魔術(shù)般”的行為炉旷,arguments里的數(shù)組元素和函數(shù)參數(shù)都是指向同一個值的引用签孔。
*在嚴(yán)格模式中,當(dāng)delete運(yùn)算符后跟隨非法的標(biāo)識符(比如變量窘行、函數(shù)饥追、函數(shù)參數(shù))時,將會拋出一個語法錯誤異常(在非嚴(yán)格模式中罐盔,這種delete表達(dá)式什么也沒做但绕,并返回false)。
*在嚴(yán)格模式中惶看,試圖刪除一個不可配置的屬性將拋出一個類型錯誤異常(在非嚴(yán)格模式中捏顺,delete表達(dá)式操作失敗,并返回false)纬黎。
*在嚴(yán)格模式中幅骄,在一個對象直接量中定義兩個或多個同名屬性將產(chǎn)生一個語法錯誤(在非嚴(yán)格模式下不會報錯)
*在嚴(yán)格模式中,函數(shù)聲明中存在兩個或多個同名的參數(shù)將產(chǎn)生一個語法錯誤(在非嚴(yán)格模式中不會報錯)
*在嚴(yán)格模式中是不允許使用八進(jìn)制整數(shù)直接量(以0位前綴本今,而不是0x為前綴)的(在非嚴(yán)格模式中某些實現(xiàn)是允許八進(jìn)制整數(shù)直接量的)
*在嚴(yán)格模式中拆座,標(biāo)識符eval和arguments當(dāng)做關(guān)鍵字主巍,它們的值是不能更改的。不能給這些標(biāo)識符賦值挪凑,也不能把它們聲明為變量孕索、用做函數(shù)名、用做函數(shù)參數(shù)或用做catch快的標(biāo)識符躏碳。
*在嚴(yán)格模式中限制了對調(diào)用棧的檢測能力搞旭,在嚴(yán)格模式的函數(shù)中,arguments.caller和arguments.callee都會拋出一個類型錯誤異常菇绵。嚴(yán)格模式的函數(shù)同樣具有caller和arguments屬性肄渗,當(dāng)訪問這兩個屬性時將拋出類型錯誤異常(有一些JavaScript的實現(xiàn)在非嚴(yán)格模式里定義了這些非標(biāo)準(zhǔn)的屬性)
js嚴(yán)格模式簡單了解及與非嚴(yán)格模式的區(qū)別
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來枚荣,“玉大人碗脊,你說我怎么就攤上這事¢献保” “怎么了衙伶?”我有些...
- 文/不壞的土叔 我叫張陵,是天一觀的道長害碾。 經(jīng)常有香客問我矢劲,道長,這世上最難降的妖魔是什么慌随? 我笑而不...
- 正文 為了忘掉前任芬沉,我火速辦了婚禮,結(jié)果婚禮上阁猜,老公的妹妹穿的比我還像新娘丸逸。我一直安慰自己,他們只是感情好剃袍,可當(dāng)我...
- 文/花漫 我一把揭開白布黄刚。 她就那樣靜靜地躺著,像睡著了一般民效。 火紅的嫁衣襯著肌膚如雪憔维。 梳的紋絲不亂的頭發(fā)上侍芝,一...
- 文/蒼蘭香墨 我猛地睜開眼虱肄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了交煞?” 一聲冷哼從身側(cè)響起咏窿,我...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡御毅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 年R本政府宣布呆躲,位于F島的核電站异逐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏歼秽。R本人自食惡果不足惜应役,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望燥筷。 院中可真熱鬧箩祥,春花似錦、人聲如沸肆氓。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽谢揪。三九已至蕉陋,卻和暖如春捐凭,著一層夾襖步出監(jiā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)載 時間:2016-09-24我要評論 在 JavaScript 的嚴(yán)格模式下,對 JavaSc...
- 因要重現(xiàn)是不是在無索引的情況下 讀寫量過大導(dǎo)致的數(shù)據(jù)庫假死船侧,需要對數(shù)據(jù)庫做個壓力測試因悲。 工具:Jmeter環(huán)境:m...