午夜国产狂喷潮在线观看|国产AⅤ精品一区二区久久|中文字幕AV中文字幕|国产看片高清在线

    ECMAScript 5嚴(yán)格模式(Strict Mode)介紹
    來源:易賢網(wǎng) 閱讀:934 次 日期:2015-03-06 12:08:56
    溫馨提示:易賢網(wǎng)小編為您整理了“ECMAScript 5嚴(yán)格模式(Strict Mode)介紹”,方便廣大網(wǎng)友查閱!

    這篇文章主要介紹了ECMAScript 5嚴(yán)格模式(Strict Mode)介紹,本文講解了如何啟用嚴(yán)格模式、啟用嚴(yán)格模式后對變量和屬性、函數(shù)、with語句的影響,需要的朋友可以參考下

    嚴(yán)格模式(Strict Mode)是ECMAScript 5的新特性,它允許你把整個程序,或者某個函數(shù),放置在“嚴(yán)格”的操作語境中。這種嚴(yán)格的語境會防止某些特定的操作并拋出更多的異常。

    雖然ECMAScript 5對ECMAScript 3是向下兼容的,但是在嚴(yán)格模式下,所有在ECMAScript 3中不贊成使用的特性都被禁用(或拋出錯誤)而不是兼容。

    啟用嚴(yán)格模式有以下好處:

    1.捕獲一些編程錯誤,并拋出異常。

    2.阻止進行一些相對“不安全”的操作(例如訪問全局變量),拋出異常。

    3.禁用一些讓人迷惑的特性。

    關(guān)于嚴(yán)格模式的大多數(shù)信息都可以在《ES5規(guī)范》[PDF]的第223頁找到。

    (注意:ECMAScript 5的嚴(yán)格模式跟Firefox的嚴(yán)格模式是不同的)

    如何啟用嚴(yán)格模式

    在程序的開頭添加這條語句即可對整段腳本啟用嚴(yán)格模式:

    代碼如下:

    'use strict';

    也可以只在函數(shù)的內(nèi)部啟用嚴(yán)格模式,這樣不會影響到外部:

    代碼如下:

    function imStrict() {

    'use strict';

    // ... your code ...

    }

    啟用嚴(yán)格模式的語句只是一段普通的字符串“use strict”,沒有任何新語法。這意味著不會對就舊式瀏覽器造成任何負(fù)面影響。

    在函數(shù)內(nèi)部啟用嚴(yán)格模式的一個實際應(yīng)用是,把整個Javascript類庫定義在嚴(yán)格模式的函數(shù)內(nèi)部,這樣就可以不影響外部的代碼:

    代碼如下:

    // Non-strict code...

    (function(){

    "use strict";

      // Define your library strictly...

    })();

    // Non-strict code...

    那么,嚴(yán)格模式下的腳本有什么改變呢?

    變量和屬性

    對未定義變量的賦值將會失敗,而不是把這個變量作為全局變量。

    寫入一個可寫特性為false的屬性,刪除一個可配置特性為false的屬性,或者添加一個可擴展特性為false的屬性,都會導(dǎo)致錯誤(這些特性是預(yù)先商定好的)。過去,這些操作不會拋出異常,僅僅是靜默地失敗。

    對變量、函數(shù)或者函數(shù)參數(shù)執(zhí)行delete操作會導(dǎo)致錯誤。

    代碼如下:

    var foo = 'test';

    function test() { }

    delete foo; // Error

    delete test; // Error

    function test2(arg) {

    delete arg; // Error

    }

    在一個對象容器內(nèi)部定義相同屬性會導(dǎo)致異常的拋出:

    代碼如下:

    // Error

    { foo: true, foo: false }

    eval

    任何對“eval”這個名字的使用(主要意圖是把eval函數(shù)指向一個變量或者是對象的屬性)都是禁止的。

    代碼如下:

    // All generate errors...

    obj.eval = ...

    obj.foo = eval;

    var eval = ...;

    for ( var eval in ... ) {}

    function eval(){}

    function test(eval){}

    function(eval){}

    new Function("eval")

    另外,通過eval聲明新變量也會無效:

    代碼如下:

    eval("var a = false;");

    print( typeof a ); // undefined

    函數(shù)

    重寫arguments對象會導(dǎo)致錯誤:

    代碼如下:

    arguments = [...]; // not allowed

    同名參數(shù)會導(dǎo)致錯誤:

    代碼如下:

    (function(foo, foo) { }) // Error

    對arguments.caller和arguments.callee的訪問會拋出異常。因此,任何需要用到的匿名函數(shù)都必須先命名,例如:

    代碼如下:

    setTimeout(function later(){

    // do stuff...

    setTimeout(later, 1000);

    }, 1000 );

    函數(shù)的arguments、caller和callee屬性不再存在,定義它們的操作也是禁止的。

    代碼如下:

    function test() { }

    test.caller = 'caller';  // Error

    最后,一個長期存在(且非常討厭)的BUG已經(jīng)被解決了:當(dāng)使用null或者undefined作為Function.prototype.call或Function.prototype.apply方法的第一個參數(shù)時,函數(shù)內(nèi)部的this將會指向全局對象。而嚴(yán)格模式將會阻止其執(zhí)行并拋出異常:

    代碼如下:

    (function(){ ... }).call(null); // Exception

    with() { }

    with() { }語句在嚴(yán)格模式下是完全掛掉了。

    更多信息請查看IT技術(shù)專欄

    更多信息請查看腳本欄目
    易賢網(wǎng)手機網(wǎng)站地址:ECMAScript 5嚴(yán)格模式(Strict Mode)介紹
    由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

    2025國考·省考課程試聽報名

    • 報班類型
    • 姓名
    • 手機號
    • 驗證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
    工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
    云南網(wǎng)警備案專用圖標(biāo)
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
    云南網(wǎng)警報警專用圖標(biāo)