js中的strict 模式和非strict 模式的比較

來源:互聯網
上載者:User

標籤:eva   tps   evel   mod   duplicate   developer   代碼   ***   通過   

前言

es5的strict 模式是採用具有限制性JavaScript變體的一種方式,從而使代碼顯示地脫離‘懶散模式/非strict 模式’

strict 模式
  1. strict 模式通過拋出錯誤來消除一些原有靜默錯誤

  2. strict 模式修複了一些導致JavaScript引擎難以最佳化的缺陷:有時候,相同的代碼,strict 模式可以比非strict 模式下運行得更快。

  3. strict 模式禁用了在ECMAScript未來版本中可能會定義的一些文法。

開啟strict 模式

在整個指令檔或者函數體開頭,寫入‘use strict‘語句。

將拼字錯誤轉成異常
  1. 無法再意外建立全域變數,會拋出錯誤。ReferenceError.: *** is not defined

  2. 引起靜默失敗的賦值操作拋出異常。 TypeError: ...

  3. 試圖刪除不可刪除的屬性時會拋出異常。TypeError: ...

  4. 要求函數的參數名唯一。SyntaxError: Duplicate parameter name not allowed in this context

  5. 禁止八位元字文法。SyntaxError: Octal literals are not allowed in strict mode.

  6. 禁止設定原始類型值的屬性。TypeError: ...

簡化變數的使用
  1. 禁用with

  2. eval不再為上層範圍引入新變數。

    在strict 模式下eval僅僅為被啟動並執行代碼建立變數。所以eval不會使得名稱映射到外部變數或者其他局部變數。

  3. 禁止刪除聲明變數。delete name在strict 模式下會引起語法錯誤。SyntaxError: Delete of an unqualified identifier in strict mode.

evalarguments變的簡單
  1. evalarguments不能通過程式文法被綁定賦值。

  2. 參數的值不會隨arguments對象的值的改變而變化。

  3. 不再支援argument.callee

“安全的”JavaScript
  1. 通過this傳遞給一個函數的值不會被強制轉換為一個對象。

  2. 再也不能通過廣泛實現的ECMAScript擴充“遊走於”JavaScript的棧中。

  3. 函數的參數不在提供對相應函數調用變數的訪問。

為未來的ECMAScript版本鋪平道路
  1. 保留了一部分字元作為關鍵字。比如implements,interface,let,package,private,protected,public,staticyield

  2. 禁止了不在指令碼或者函數層面上的函式宣告

瀏覽器的strict 模式

主流瀏覽器現在實現了strict 模式。但是也有大量瀏覽器只支援部分strict 模式或者根本就不支援,所以不要盲目依賴strict 模式。

參考MDN

js中的strict 模式和非strict 模式的比較

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.