<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        理解javascript中的嚴格模式_javascript技巧

        來源:懂視網(wǎng) 責編:小采 時間:2020-11-27 20:50:21
        文檔

        理解javascript中的嚴格模式_javascript技巧

        理解javascript中的嚴格模式_javascript技巧:一、什么是嚴格模式 我們平時寫的JavaScript代碼一般都運行在正常模式中的,除了正常運行模式,ECMAscript 5添加了第二種運行模式:嚴格模式(strict mode)。看名字就知道,這種模式會讓JavaScript在更嚴格的環(huán)境中運行。 包括IE 10在內(nèi)的主流瀏覽
        推薦度:
        導讀理解javascript中的嚴格模式_javascript技巧:一、什么是嚴格模式 我們平時寫的JavaScript代碼一般都運行在正常模式中的,除了正常運行模式,ECMAscript 5添加了第二種運行模式:嚴格模式(strict mode)。看名字就知道,這種模式會讓JavaScript在更嚴格的環(huán)境中運行。 包括IE 10在內(nèi)的主流瀏覽
        一、什么是嚴格模式
        我們平時寫的JavaScript代碼一般都運行在正常模式中的,除了正常運行模式,ECMAscript 5添加了第二種運行模式:”嚴格模式”(strict mode)。看名字就知道,這種模式會讓JavaScript在更嚴格的環(huán)境中運行。
        包括IE 10在內(nèi)的主流瀏覽器,都已經(jīng)支持它,許多大項目已經(jīng)開始全面擁抱。(github上面好多項目都是用的嚴格模式)
        二、啟用嚴格模式
        為整個腳本啟用嚴格模式
        在所有語句之前放一個特定語句 "use strict";
        假設有一個腳本reeoo.js,可以這樣開啟嚴格模式:

        BUT這種寫法存在天然的坑,假如我們要做代碼合并,我現(xiàn)在要把heigui.js:

        和reeoo.js進行合并,本來兩個腳本分開執(zhí)行是好好的,合起來就會報錯。
        Uncaught ReferenceError: heigui is not defined(…)
        一個嚴格模式的腳本和一個非嚴格模式的腳本合并可能會導致非嚴格模式的腳本代碼報錯,建議代碼都包在一個立即執(zhí)行函數(shù)里面。

        這樣合并之后就不會報錯了。
        為某個函數(shù)啟用嚴格模式
        要給某個函數(shù)開啟嚴格模式,得把"use strict"; 聲明放在函數(shù)體所有語句之前就行了。

        Chrome中調(diào)試嚴格模式
        我有這么一段代碼:

        把這段代碼直接粘貼到Chrome的控制臺中執(zhí)行,正常情況下應該報錯,但是并沒有報錯,


        很顯然,嚴格模式下變量不適用var聲明是不合法的,但是為什么沒有報錯?
        這是什么鬼,難道Chrome不支持嚴格模式?開什么玩笑。。
        網(wǎng)上搜了一下,原來Chrome的控制臺的代碼是運行在eval之中的,你沒法對eval函數(shù)使用嚴格模式(應該也不完全對,但是具體Chrome做了什么,不得而知),下圖說明eval函數(shù)可以使用嚴格模式:

        要想在Chrome瀏覽器中對嚴格模式正常報錯,需要在代碼外層套一個立即執(zhí)行函數(shù),或者其它類似的措施。

        這樣就可以了
        FireFox代碼草稿紙調(diào)試嚴格模式
        Chrome非要我們包一層閉包才能跑嚴格模式,既然這么麻煩,有沒有別的方式可以直接跑嚴格模式的代碼呢?
        FireFox有一個代碼草稿紙可以直接跑,快捷鍵SHIFT+F4

        嚴格模式到底有多嚴格
        嚴格模式中一些重要的限制

        1、變量聲明
        不允許使用一個沒有聲明的變量

        報錯(代碼草稿紙,下同)
        Exception: ReferenceError: assignment to undeclared variable name

        2、修改只讀屬性的值

        嚴格模式下會報錯:
        Uncaught TypeError: Cannot assign to read only property 'prop1' of #
        非嚴格模式頂多就是值賦不上去而已,并不會報錯

        3、修改不可擴展的屬性
        表現(xiàn)為將屬性添加到 extensible 屬性設置為 false 的對象。

        嚴格模式報錯:
        Uncaught TypeError: Can't add property name, object is not extensible
        非嚴格模式不會報錯,但是testObj也不會被擴展。
        4、刪除變量、函數(shù)或參數(shù)
        刪除 configurable 特性設置為 false 的屬性。

        報錯:
        Uncaught SyntaxError: Delete of an unqualified identifier in strict mode.

        5、在一個對象文本中多次定義某個屬性
        嚴格模式下不允許一個屬性有多個定義

        報錯(node控制臺)
        Duplicate data property in object literal not allowed in strict mode
        正常模式中后聲明的重復的變量會覆蓋前面聲明的,而且不會報錯。
        注:這個問題在ECMAScript6中已被修復。

        6、嚴格模式下不允許形參參數(shù)名稱重復

        報錯:
        Uncaught SyntaxError: Duplicate parameter name not allowed in this context

        7、無法使用標識符的未來保留字。嚴格模式下將保留標識符名稱
        一下標識符(ES6中依然沒有實現(xiàn)的)在嚴格模式中是不能使用的,否則也會報錯。
        用了就是這個下場:
        Uncaught SyntaxError: Unexpected strict mode reserved word

      1. implements
      2. interface
      3. package
      4. private
      5. protected
      6. public
      7. static
      8. yield
      9. 8、嚴格模式下不允許使用八進制數(shù)字參數(shù)和轉(zhuǎn)義字符

        報錯:
        Uncaught SyntaxError: Unexpected token ILLEGAL(…)
        9、當this 的值為 null 或 undefined 時,該值不會轉(zhuǎn)換為全局對象
        比如:

        在非嚴格模式下,testvar 的值為全局對象window,但在嚴格模式下,該值為 undefined。

        10、字符串"eval"不能用作標識符(變量或函數(shù)名、參數(shù)名等)

        Uncaught SyntaxError: Unexpected eval or arguments in strict mode

        11、在嚴格模式下,函數(shù)聲明無法嵌套在語句或塊中。它們只能顯示在頂級或直接顯示在函數(shù)體中

        node控制臺:
        SyntaxError: In strict mode code, functions can only be declared at top level or immediately within another function.
        但是這個限制已經(jīng)在ES6中被修復
        12、嚴格模式下eval用法無效
        如果在 eval 函數(shù)內(nèi)聲明變量,則不能在此函數(shù)外部使用該變量。

        Uncaught ReferenceError: testvar is not defined

        13、嚴格模式下"arguments"用法無效
        字符串”arguments”不能用作標識符(變量或函數(shù)名、參數(shù)名等)。

        Uncaught SyntaxError: Unexpected eval or arguments in strict mode

        這個跟上面第10條的限制是差不多的。
        14、函數(shù)內(nèi)的 arguments,無法更改arguments 對象的成員的值

        在非嚴格模式下,可以通過更改 arguments[0] 的值來更改 oneArg 參數(shù)的值,從而使 oneArg 和 arguments[0] 的值都為 20。在嚴格模式下,更改 arguments[0] 的值不會影響 oneArg 的值,因為 arguments 對象只是一個本地副本。
        15、不允許使用arguments.callee

        用了的下場就是這樣:
        Uncaught TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
        16、不允許使用with

        Uncaught SyntaxError: Strict mode code may not include a with statement
        為什么要使用嚴格模式
        既然這種模式這么多限制,我為什么還要用呢?閑得蛋疼嗎?當然8是,
        JavaScript作為一門一開始用于瀏覽器的腳本語言,容錯性非常好,即使有時候你的代碼寫的不標準,也不會報錯,但這有時候會變成代碼隱患。開啟了嚴格模式之后,JavaScript的一些不合理的不嚴謹?shù)恼Z法都會得到控制,讓你能夠更嚴謹?shù)臅鴮慗avaScript代碼,成為一個更好的程序員。嚴格模式是ES5時代的產(chǎn)物,ES2015已經(jīng)在普及的路上,是時候使用嚴格模式了!

        參考
        1. 嚴格模式
        2. 嚴格模式

        原文:http://reeoo.me/archives/strictmode.html

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        理解javascript中的嚴格模式_javascript技巧

        理解javascript中的嚴格模式_javascript技巧:一、什么是嚴格模式 我們平時寫的JavaScript代碼一般都運行在正常模式中的,除了正常運行模式,ECMAscript 5添加了第二種運行模式:嚴格模式(strict mode)。看名字就知道,這種模式會讓JavaScript在更嚴格的環(huán)境中運行。 包括IE 10在內(nèi)的主流瀏覽
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        Top
        主站蜘蛛池模板: 久久久久亚洲AV无码去区首| 亚洲人和日本人jizz| 成人免费观看男女羞羞视频| 97人伦色伦成人免费视频| 亚洲人成网网址在线看| 免费人成在线视频| 亚洲日韩精品国产3区| 免费看片免费播放| 在线观看亚洲电影| 亚洲成a人片在线播放| 一区二区三区免费在线视频| 久久精品国产亚洲精品| 最新亚洲成av人免费看| 亚洲一区中文字幕久久| 91九色视频无限观看免费| 亚洲情A成黄在线观看动漫软件| 在线看片免费不卡人成视频| 亚洲精品宾馆在线精品酒店| 国产高清免费在线| 国产男女爽爽爽免费视频| 亚洲激情中文字幕| 成人毛片18岁女人毛片免费看| 亚洲高清一区二区三区电影| 亚洲国产婷婷综合在线精品 | 亚洲av永久无码一区二区三区| 波多野结衣久久高清免费 | 国产免费高清69式视频在线观看| 亚洲中文字幕日产乱码高清app| 久久免费公开视频| 亚洲综合无码一区二区痴汉| 亚洲黄黄黄网站在线观看| 久久永久免费人妻精品| 亚洲午夜精品一区二区麻豆| 亚洲国产一级在线观看| 美丽的姑娘免费观看在线播放 | 可以免费观看一级毛片黄a| 91在线免费视频| 亚洲人配人种jizz| 国产亚洲欧洲Aⅴ综合一区| 91久久精品国产免费直播| 一级一黄在线观看视频免费|