国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

在JavaScript中使用嚴(yán)格模式(Strict Mode)

2024-05-06 15:38:03
字體:
供稿:網(wǎng)友

前言

ECMAScript5中引入的嚴(yán)格模式,通過讓JavaScript運(yùn)行環(huán)境對一些開發(fā)過程中最常見和不易發(fā)現(xiàn)的錯誤做出和當(dāng)前不同的處理,來讓開發(fā)者擁有一個”更好”的JavaScript語言。很長一段時間內(nèi),由于只有Firefox支持嚴(yán)格模式,我曾對嚴(yán)格模式表示懷疑。但到了今天,所有主流的瀏覽器都在他們的最新版本中支持了嚴(yán)格模式(包括IE10,Opera12和Android4,IOS5)是時候開始使用嚴(yán)格模式了。

嚴(yán)格模式能起到什么作用?

嚴(yán)格模式為JavaScript引入了很多變化,我把他們分為兩類(明顯的和細(xì)微的)。細(xì)微改進(jìn)的目標(biāo)是修復(fù)當(dāng)前JavaScript中的一些細(xì)節(jié)問題,對于這些問題我不在這里進(jìn)行深入介紹;我在這里主要介紹嚴(yán)格模式引入的明顯變化,那些在你使用嚴(yán)格模式前應(yīng)該知道的概念和那些對你幫助最大的改變。

在開始學(xué)習(xí)具體特性前,請記住嚴(yán)格模式的一大目標(biāo)是讓你能更快更方便的調(diào)試。運(yùn)行環(huán)境在發(fā)現(xiàn)問題時顯性的拋出錯誤比默不做聲的失敗或怪異行事(未開啟嚴(yán)格模式的JavaScript運(yùn)行環(huán)境經(jīng)常這樣)要好。嚴(yán)格模式會拋出更多錯誤,但這是好事,因?yàn)檫@些錯誤會喚起你注意并修復(fù)很多以前很難被發(fā)現(xiàn)的潛在問題。

1. 去除with關(guān)鍵詞

首先,嚴(yán)格模式中去除了with語句,包含with語句的代碼在嚴(yán)格模式中會拋出異常。所以使用嚴(yán)格模式的第一步:確保你的代碼中沒有使用with。

// 在嚴(yán)格模式中以下JavaScript代碼會拋出錯誤with (location) {alert(href);}

2. 防止意外為全局變量賦值

其次,局部變量在賦值前必須先進(jìn)行申明。在啟用嚴(yán)格模式之前,為一個未申明的局部變量復(fù)制時會自動創(chuàng)建一個同名全局變量。這是Javacript程序中最容易出現(xiàn)的錯誤之一, 在嚴(yán)格模式中嘗試這么做時會有顯性的異常拋出。

// 嚴(yán)格模式下會拋出異常(function() {someUndeclaredVar = "foo";}());

3. 函數(shù)中的this不再默認(rèn)指向全局

嚴(yán)格模式中另一個重要的變化是函數(shù)中未被定義或?yàn)榭? null or undefined)的this不在默認(rèn)指向全局環(huán)境(global)。這會造成一些依賴函數(shù)中默認(rèn)this行為的代碼執(zhí)行出錯,例如:

window.color = "red";function sayColor() {alert(this.color);}// 在strict模式中會報錯, 如果不在嚴(yán)格模式中則提示 “red"sayColor();// 在strict模式中會報錯, 如果不在嚴(yán)格模式中則提示 “red"sayColor.call(null);

this在被賦值之前會一直保持為undefined,這意味著當(dāng)一個構(gòu)造函數(shù)在執(zhí)行時,如果之前沒有明確的new關(guān)鍵詞,會拋出異常。

function Person(name) {this.name = name;}//在嚴(yán)格模式中會報錯var me = Person("Nicholas");

在上面的代碼中,Person構(gòu)造函數(shù)運(yùn)行時因?yàn)橹皼]有new,函數(shù)中的this會保留為undefined, 由于你不能為undefined設(shè)置屬性,上面的代碼會拋出錯誤。 在非strict模式環(huán)境中,沒有被復(fù)制的this會默認(rèn)指向window全局變量,運(yùn)行的結(jié)果將是意外的為window全局變量設(shè)置name屬性。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 礼泉县| 武宣县| 庄浪县| 马边| 策勒县| 伊吾县| 都兰县| 兖州市| 治多县| 广灵县| 湟中县| 页游| 铁岭县| 常州市| 西青区| 太仓市| 岫岩| 张家港市| 贵溪市| 沁水县| 灌南县| 鹤庆县| 苏尼特左旗| 侯马市| 常德市| 汉沽区| 廉江市| 东城区| 凤冈县| 永昌县| 朔州市| 理塘县| 五家渠市| 运城市| 兴海县| 静安区| 汝城县| 景洪市| 贡嘎县| 镇安县| 盐城市|