<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關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題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關鍵字專題關鍵字專題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起點(嚴格模式深度了解)_基礎知識

        來源:懂視網 責編:小采 時間:2020-11-27 21:07:02
        文檔

        JavaScript起點(嚴格模式深度了解)_基礎知識

        JavaScript起點(嚴格模式深度了解)_基礎知識:嚴格模式(Strict Mode)是ECMAScript5新增的功能。ECMAScript5雖然可以向后兼容ECMAScript3,但如果使用嚴格模式,哪些ECMAScript5不在建議使用的ECMAScript3語法功能將會被全部進制,如果出現就會拋出一行。引入Strict Mode目的是允許開發(fā)人員
        推薦度:
        導讀JavaScript起點(嚴格模式深度了解)_基礎知識:嚴格模式(Strict Mode)是ECMAScript5新增的功能。ECMAScript5雖然可以向后兼容ECMAScript3,但如果使用嚴格模式,哪些ECMAScript5不在建議使用的ECMAScript3語法功能將會被全部進制,如果出現就會拋出一行。引入Strict Mode目的是允許開發(fā)人員

        嚴格模式(Strict Mode)是ECMAScript5新增的功能。ECMAScript5雖然可以向后兼容ECMAScript3,但如果使用嚴格模式,哪些ECMAScript5“不在建議使用”的ECMAScript3語法功能將會被全部進制,如果出現就會拋出一行。引入Strict Mode目的是允許開發(fā)人員能夠選擇“更好”的Javascript版本,這個版本能用不同的方式處理那些普遍而又臭名昭著的錯誤。目前所有的主流瀏覽器的最新版本——包括IE10與Opera12——都支持嚴格模式。關于嚴格模式的大多數信息都可以在《ES5規(guī)范》[PDF]的第223頁找到。

        如何啟用嚴格模式
        可以在全局范圍內使用嚴格模式,也可以在一個函數范圍內使用嚴格模式。如果要再全局范圍內啟用嚴格模式,只需要在程序的第一行使用代碼即可:
        代碼如下:
        'use strict';

        在函數的內部啟用嚴格模式,只需要在函數體內第一行使用代碼即可:
        代碼如下:
        function imStrict(){
          'use strict';
          // ... 其他代碼 ...
        }

        啟用嚴格模式的語句只是一段普通的字符串“use strict”,沒有任何新語法。這意味著不會對就舊式瀏覽器造成任何負面影響,因此可以大膽使用。

        在函數內部啟用嚴格模式的一個實際應用是,把整個Javascript類庫定義在嚴格模式的函數內部,這樣就可以不影響外部的代碼:
        代碼如下:
        (function(){
          "use strict";
          // Define your library strictly...
        })();

        嚴格模式帶來了什么?
        在開始介紹特殊特性之前,你需要記住,嚴格模式的目標之一是允許更快地調試錯誤。幫助開發(fā)者調試的最佳途徑是當確定的問題發(fā)生時拋出相應的錯誤(throw errors when certain patterns occur),而不是悄無聲息地失敗或者表現出奇怪的行為(這正是如今不在嚴格模式下的Javascript做的)。嚴格模式下的代碼拋出更多的錯誤信 息,這是好事,因為它能幫助開發(fā)者很快注意到一些必須立即解決的問題。

        去除with語句(Eliminates with)
        首先,嚴格模式去除了with語句。當with語句出現在嚴格模式中時,它會被認為是非法的Javascript語句并拋出語法錯誤。所以,使用嚴格模式的第一步就是確保你沒有在使用with。
        代碼如下:
        // 在嚴格模式中將導致語法錯誤
        with(location){
        alert(href);
        }

        防止意外的全局變量(Prevents accidental globals)
        第二點是,變量在賦值之前必須聲明。在非嚴格模式下,給一個未聲明的變量賦值將自動生成一個該名字的全局變量。這是Javascript中最普遍的錯誤之一。嚴格模式中,這樣做將拋出一個錯誤。
        代碼如下:
        // 嚴格模式中拋出一個錯誤
        (function(){
        someUndeclaredVar ="foo";
        }());

        取消this值的強制轉換(Eliminates this coercion)
        另一個重要的變化是,當this值為null或undefined時,不會再將其強制轉換為全局對象。也就是說,this保留了它的原始值,也因此可能會導致一些依賴于強制轉換的代碼發(fā)生錯誤。例如:
        代碼如下:
        window.color ="red";
        function sayColor(){
        // 嚴格模式下,this不會指向window
        alert(this.color);
        }
        // 以下兩種情況,在嚴格模式下都拋出錯誤
        sayColor();
        sayColor.call(null);

        根本而言,this值必須賦值,否則將保留undefined值。這意味著調用構造函數時若漏掉了new關鍵字也會導致錯誤:
        代碼如下:
        functionPerson(name){
        this.name = name;
        }
        // 嚴格模式下導致錯誤
        var me =Person("Nicholas");

        在這段代碼里,調用Person構造函數時缺少了new關鍵字,此時this值為undefined。由于你不能給undefined添加屬性,這段代碼拋出了一個錯誤。在非嚴格模式下,this會強制轉換為全局對象,因此name屬性能夠被正確賦值為全局變量。
        拒絕重復(No duplicates)
        當你做了大量的編碼的時候,你很容易在對象中定義了重復的屬性或者給函數定義了重復的參數名。嚴格模式下,這兩種情況都會導致錯誤的發(fā)生:
        代碼如下:
        // 嚴格模式下錯誤 - 重復參數
        function doSomething(value1, value2, value1){
        //code
        }
        // 嚴格模式下錯誤 - 重復屬性
        var object ={
        foo:"bar",
        foo:"baz"
        };

        這兩者都是語法錯誤,在代碼執(zhí)行之前將拋出錯誤。
        更安全的eval()(Safer eval())
        eval()沒有被移除,但它在嚴格模式下發(fā)生了一些變化。最大的改變是:在eval()語句中聲明的變量以及函數不會在包含域中創(chuàng)建。例如:
        代碼如下:
        (function(){
        eval("var x = 10;");
        // 非嚴格模式下,x為10
        // 嚴格模式下,x沒有聲明,拋出一個錯誤
        alert(x);
        }());

        任意由eval()創(chuàng)建的變量或函數仍呆在eval()里。然而,你可以通過從eval()中返回一個值的方式實現值的傳遞:
        代碼如下:
        (function(){
        var result =eval("var x = 10, y = 20; x + y");
        // 嚴格模式與非嚴格模式下都能正常工作(得到30)
        alert(result);
        }());

        不可改變引發(fā)的錯誤(Errors for immutables)
        ECMAScript 5 同時引入了修改屬性特征的能力,例如設置一個屬性為只讀或者凍結整個對象的結構(freezing an entire object's structure)。在非嚴格模式下,試圖修改一個不可變的屬性時將悄無聲息地失敗。你可能在使用一些原生APIs的時候已經遇到這類問題。嚴格模式將 保證無論你在何時試圖使用一種不被允許的方式修改一個對象或對象的屬性時拋出錯誤。
        代碼如下:
        var person ={};
        Object.defineProperty(person,"name"{
        writable:false,
        value:"Nicholas"
        });
        // 非嚴格模式下將悄無聲息地失敗,嚴格模式則拋出錯誤
        person.name ="John";

        這個例子中,name屬性被設置為只讀。在非嚴格模式下,對name的賦值將悄無聲息地失敗;而在嚴格模式下,一個錯誤將被拋出。

        注:如果你在使用ECMAScript屬性能力(the ECMAScript attribute capabilities),我強烈推薦你開啟嚴格模式。如果你在改變對象的可變性(mutability of objects),你將遇到一堆錯誤,而它們在非嚴格模式下將被安靜地帶過。

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

        文檔

        JavaScript起點(嚴格模式深度了解)_基礎知識

        JavaScript起點(嚴格模式深度了解)_基礎知識:嚴格模式(Strict Mode)是ECMAScript5新增的功能。ECMAScript5雖然可以向后兼容ECMAScript3,但如果使用嚴格模式,哪些ECMAScript5不在建議使用的ECMAScript3語法功能將會被全部進制,如果出現就會拋出一行。引入Strict Mode目的是允許開發(fā)人員
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲AV无码乱码精品国产| 91精品国产免费久久国语蜜臀| 国产精品自拍亚洲| 特级毛片aaaa级毛片免费| 成人网站免费看黄A站视频| 免费91最新地址永久入口| 成人免费视频网址| 在线亚洲人成电影网站色www | 久久久久久久岛国免费播放| 成人人免费夜夜视频观看| 亚洲综合区小说区激情区| 亚洲国产午夜精品理论片| 麻豆69堂免费视频| 亚洲综合久久夜AV | 13小箩利洗澡无码视频网站免费| 亚洲Av无码专区国产乱码DVD| 亚洲日本va一区二区三区| a色毛片免费视频| 午夜免费福利影院| 亚洲AV无码专区国产乱码4SE| 亚洲免费精彩视频在线观看| 亚洲婷婷综合色高清在线| 日本中文字幕免费高清视频| 国产亚洲一区区二区在线| 国内成人精品亚洲日本语音| 亚洲国产综合无码一区二区二三区| 亚洲熟妇AV日韩熟妇在线| **一级一级毛片免费观看| 成人午夜亚洲精品无码网站| 亚洲免费视频在线观看| 亚洲区日韩精品中文字幕| 亚洲伊人久久成综合人影院| 久久永久免费人妻精品下载 | 国产卡二卡三卡四卡免费网址| 亚洲情综合五月天| 免费国产高清毛不卡片基地| 成人国产mv免费视频| 亚洲AV无码一区二区三区电影 | 一级女性全黄生活片免费看| 国产片免费福利片永久| 亚洲中文字幕精品久久|