是时候开始使用JavaScript严格模式了怎样启用javascri
E是時候開始使用JavaScript嚴格模式了怎樣啟用javascriCMAScript5將嚴格模式(strictmode)引入了Javascript中,目的是允許開發人員能夠選擇“更好”的Javascript版本,這個版本能用不同的方式處理那些普遍而又臭名昭著的錯誤。一開始的時候,我對該模式抱著懷疑的態度,因為當時在只有一款瀏覽器(Firefox)支持嚴格模式。時至今日,所有的主流瀏覽器的最新版本——包括IE10與Opera12——都支持嚴格模式。使用嚴格模式的時機已經成熟了。
AD:
ECMAScript5將嚴格模式(strictmode)引入了Javascript中,目的是允許開發人員能夠選擇“更好”的Javascript版本,這個版本能用不同的方式處理那些普遍而又臭名昭著的錯誤。一開始的時候,我對該模式抱著懷疑的態度,因為當時在只有一款瀏覽器(Firefox)支持嚴格模式。時至今日,所有的主流瀏覽器的最新版本——包括IE10與Opera12——都支持嚴格模式。使用嚴格模式的時機已經成熟了。
它帶來了什么?
嚴格模式給Javascript的運行方式帶來了許多不同,我將它們分為了兩類:明顯的(obvious),以及微妙的(subtle)。那些微妙的改變是為了解決微妙的問題,我不打算在這里對其進行贅述。如果你對這些細節感興趣,請參考DmitrySoshnikov的精彩文章,《ECMA-262-5inDetail.Chapter2.StrictMode》。我對介紹明顯的變化更感興趣:它們是你開始使用嚴格模式之前所必須了解的,也可能給你帶來最多好處。
在開始介紹特殊特性之前,你需要記住,嚴格模式的目標之一是允許更快地調試錯誤。幫助開發者調試的最佳途徑是當確定的問題發生時拋出相應的錯誤(throwerrorswhencertainpatternsoccur),而不是悄無聲息地失敗或者表現出奇怪的行為(這正是如今不在嚴格模式下的Javascript做的)。嚴格模式下的代碼拋出更多的錯誤信息,這是好事,因為它能幫助開發者很快注意到一些必須立即解決的問題。
去除with語句(Eliminateswith)
首先,嚴格模式去除了with語句。當with語句出現在嚴格模式中時,它會被認為法的Javascript語句并拋出語法錯誤。所以,使用嚴格模式的第一步就是確保你沒有在使用with。
防止意外的全局變量(Preventsaccidentalglobals)
第二點是,變量在賦值之前必須聲明。在非嚴格模式下,給一個未聲明的變量賦值將自動生成一個該名字的全局變量。這是Javascript中最普遍的錯誤之一。嚴格模式中,這樣做將拋出一個錯誤。
取消this值的強制轉換(Eliminatesthiscoercion)
另一個重要的變化是,當this值為null或undefined時,不會再將其強制轉換為全局對象。也就是說,this保留了它的原始值,淘寶網女裝秋裝外套也因此可能會導致一些依賴于強制轉換的代碼發生錯誤。例如:
在這段代碼里,調用Person構造函數時缺少了new關鍵字,此時this值為undefined。由于你不能給undefined添加屬性,這段代碼拋出了一個錯誤。在非嚴格模式下,this會強制轉換為全局對象,因此name屬性能夠被正確賦值為全局變量。
重復(Noduplicates)
當你做了大量的編碼的時候,你很容易在對象中定義了重復的屬性或者給函數定義了重復的參數名。嚴格模式下,這兩種情況都會導致錯誤的發生:
這兩者都是語法錯誤,在代碼執行之前將拋出錯誤。
更安全的eval()(Safereval())
eval()沒有被移除,但它在嚴格模式下發生了一些變化。最大的改變是:在eval()語句中聲明的變量以及函數不會在包含域中創建。例如:
不可改變引發的錯誤(Errorsforimmutables)
怎樣啟用javascriptECMAScript5同時引入了修改屬性特征的能力,例如設置一個屬性為只讀或者凍結整個對象的結構(freezinganentireobject’sstructure)。在非嚴格模式下,試圖修改一個不可變的屬性時將悄無聲息地失敗。你可能在使用一些原生APIs的時候已經遇到這類問題。嚴格模式將無論你在何時試圖使用一種不被允許的方式修改一個對象或對象的屬性時拋出錯誤。
這個例子中,name屬性被設置為只讀。在非嚴格模式下,對name的賦值將悄無聲息地失敗;而在嚴格模式下,一個錯誤將被拋出。
注:如果你在使用ECMAScript屬性能力(theECMAScriptattributecapabilities),我強烈推薦你嚴格模式。如果你在改變對象的可變性(mutabilityofobjects),你將遇到一堆錯誤,而它們在非嚴格模式下將被安靜地帶過。
該如何使用它?
在現代瀏覽器中很容易啟用嚴格模式,只需添加下面一條語句:
雖然這看起來只是一個沒有賦值給變量的字符串,但它確實地了Javascript引擎切換為嚴格模式(那些不支持嚴格模式的瀏覽器只是簡單地讀取了這個字符串然后繼續像平常一樣運行)。你可以在全局或函數中使用它。話雖這么說,你永遠不應該在全局中使用它。全局地使用這條,意味著同個文件下的所有代碼都在嚴格模式下運行。
這看起來似乎不是個大問題,但在我們這個不同腳本堆積在一起的世界里(ourworldoggressivescriptconcatenation)將導致煩。只要有一份腳本全局地包含這條指令,其它的腳本也將在嚴格模式下運行(可能引發一些你從沒預想到的錯誤)。
因此,最好只在函數內使用嚴格模式,例如:
結論
我強烈每一個人都開始使用嚴格模式。現在已經有足夠多的瀏覽器支持該模式,它將把你從藏身代碼的錯誤中出來。你需要確保你沒有全局地包含啟用指令,但可以頻繁地使用IIFEs給任意多的代碼應用嚴格模式。一開始,你將碰到從沒遇過的錯誤——這是很正常的。切換到嚴格模式后,你需要做足夠多的測試來你已hold住你的代碼。一定不能只是將“usestrict”扔進你的代碼然后就假設不會有錯誤發生。至少的至少,你該開始使用這個異常有用的語言特性來寫更好的代碼了。
原文:
【編輯推薦】
轉載于:https://www.cnblogs.com/wangseng/archive/2012/04/27/2474225.html
總結
以上是生活随笔為你收集整理的是时候开始使用JavaScript严格模式了怎样启用javascri的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求一个qq空间情侣网名
- 下一篇: 最新微信网名女生