欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于eval 與new Function 到底該選哪個(gè)?

 更新時(shí)間:2013年04月17日 11:01:00   作者:  
本篇文章小編將為大家介紹,關(guān)于eval 與new Function 到底該選哪個(gè)?有需要的朋友可以參考一下

廢話不多說,直接上測試代碼

復(fù)制代碼 代碼如下:

var aa = "{name:'cola',item:[{age:11},{age:22},{age:23},{age:23}]}";
    var now = new Date().getTime();
    for (var i = 0; i < 100000; i++) {
        var a = eval("(" + aa + ")");

    }
    var now1 = new Date().getTime();
    document.write("eval 時(shí)間為:" + (now1 - now) + "<br/>");

 
    var now2 = new Date().getTime();
    for (var i = 0; i < 100000; i++) {
        var fn = new Function("return" + aa);
        fn();
    }
    var now3 = new Date().getTime();
    document.write("new Function時(shí)間為:" + (now3 - now2) + "<br/>");

        //經(jīng)過測試結(jié)果 FF效果如下
        //eval 時(shí)間為:979
        //new Function時(shí)間為:1372

        //經(jīng)過測試結(jié)果 IE8效果如下
        //eval 時(shí)間為:913
        //new Function時(shí)間為:1037

        //經(jīng)過測試結(jié)果 Chrome效果如下
        //eval 時(shí)間為:211
        //new Function時(shí)間為:251

        //經(jīng)過測試結(jié)果 Opera
        //eval 時(shí)間為:384
        //new Function時(shí)間為:1024

測試結(jié)果為不同瀏覽器測試的參考數(shù)據(jù),覺得奇怪的是為什么每個(gè)瀏覽器測試的時(shí)候都是eval要快點(diǎn),我們是不是要采用他呢?

親,先不要急, 接下往下看,帶著這些疑問,好奇心的我終于展開了另外一個(gè)測試,這時(shí)候我做一個(gè)動(dòng)態(tài)涵數(shù)來分別讓eval 和 new Function 來執(zhí)行再看看效果

復(fù)制代碼 代碼如下:

var testEval = function (obj) {
         <SPAN style="COLOR: #ff0000"> return eval('0, ' + obj + '');</SPAN>
        //return eval('( ' + obj + ')');
      };

      var testFun = function (obj) {
          var fn = new Function("return " + obj);
          fn();
      };

      var now = new Date().getTime();
      for (var i = 0; i < 1000; i++) {
          var fn = testEval("function test(){ document.write('我有一頭小毛驢,從來也不騎.........'); }");
          fn();
      }
      var now1 = new Date().getTime();
      document.write("<br/>");
      document.write("eval 時(shí)間為:" + (now1 - now) + "<br/>");

      var now2 = new Date().getTime();
      for (var i = 0; i < 1000; i++) {
          testFun("document.write('我有一頭小毛驢,從來也不騎.........');");
      }
      var now3 = new Date().getTime();
      document.write("new Function時(shí)間為:" + (now3 - now2) + "<br/>");

  //經(jīng)過測試結(jié)果 FF效果如下
        //eval 時(shí)間為:495
        //new Function時(shí)間為:50

        //經(jīng)過測試結(jié)果 IE8效果如下
        //eval 時(shí)間為:34
        //new Function時(shí)間為:20

        //經(jīng)過測試結(jié)果 Chrome效果如下
        //eval 時(shí)間為:7
        //new Function時(shí)間為:4

        //經(jīng)過測試結(jié)果 Opera
        //eval 時(shí)間為:7
        //new Function時(shí)間為:18

        如上結(jié)果測試 如果構(gòu)建一個(gè)動(dòng)態(tài)執(zhí)行讓eval去執(zhí)行 在FF上是超級的慢, 其它瀏覽器差別不大, 我們這里不必過于太多追究
        return eval('0, ' + obj + ''); 可能大家覺得這里這個(gè) 0 是什么意思,加0主要是兼容所有的瀏覽器,不加的話,IE9以下版本就會報(bào)錯(cuò)
        但是真正的0的意思 怎么去剖析 我還真不知道,只是知道加 了這個(gè)就可以解決惡心的IE不能兼容的問題
        經(jīng)過上面二個(gè)栗子說明 如果是為了JSON串的轉(zhuǎn)換eval 明顯要快, 如果是動(dòng)態(tài)涵數(shù)解析 那么 new Function要快, 這里說出了二個(gè)優(yōu)劣勢, 還有的就是eval兼容性不很好,如果解析出錯(cuò),可能會導(dǎo)致其它的JS腳本不會執(zhí)行,
        而 后者則不會,他只會針對于 這個(gè)Function  我這人不喜歡太麻煩的事情, 果斷放棄eval 用 new Function 來代替。 如果有理解的不太對的地方,請大家指正,歡迎拍磚。

相關(guān)文章

  • DOM基礎(chǔ)教程之使用DOM控制表單

    DOM基礎(chǔ)教程之使用DOM控制表單

    這篇文章主要介紹了DOM基礎(chǔ)教程之使用DOM控制表單的相關(guān)資料,需要的朋友可以參考下
    2015-01-01
  • JavaScript中的getDay()方法使用詳解

    JavaScript中的getDay()方法使用詳解

    這篇文章主要介紹了JavaScript中的getDay()方法使用詳解,是JS入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-06-06
  • 詳解JavaScript中的客戶端消息框架設(shè)計(jì)原理

    詳解JavaScript中的客戶端消息框架設(shè)計(jì)原理

    這篇文章主要介紹了詳解JavaScript中的客戶端消息框架設(shè)計(jì)原理,包括客戶端和服務(wù)器端的通信等方面的內(nèi)容,需要的朋友可以參考下
    2015-06-06
  • js基石系列學(xué)習(xí)之錯(cuò)誤類型

    js基石系列學(xué)習(xí)之錯(cuò)誤類型

    這篇文章主要為大家介紹了js基石系列學(xué)習(xí)之錯(cuò)誤類型示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Websocket協(xié)議詳解及簡單實(shí)例代碼

    Websocket協(xié)議詳解及簡單實(shí)例代碼

    這篇文章主要介紹了Websocket協(xié)議詳解及簡單實(shí)例代碼的相關(guān)資料,這里對websocket 協(xié)議進(jìn)行詳細(xì)介紹,并附簡單實(shí)例代碼,需要的朋友可以參考下
    2016-12-12
  • JavaScript內(nèi)核之基本概念

    JavaScript內(nèi)核之基本概念

    本文將聚焦于JavaScript中的基本概念,這些概念與傳統(tǒng)語言有比較大的不同,因此單獨(dú)列出一章來做專門描述,理解本章的概念對書中后續(xù)章節(jié)的概念,代碼的行為等會有很大的幫助,讀者不妨花比較大的時(shí)間在本章,即使你對JavaScript已經(jīng)比較熟悉,也建議通讀本文
    2011-10-10
  • Javascript學(xué)習(xí)筆記二 之 變量

    Javascript學(xué)習(xí)筆記二 之 變量

    上面描述了數(shù)據(jù)類型,學(xué)習(xí)完數(shù)據(jù)類型就不得不提到變量。
    2010-12-12
  • JavaScript 無符號右移運(yùn)算符

    JavaScript 無符號右移運(yùn)算符

    無符號右移運(yùn)算符 (>>>)是右移表達(dá)式的位,不保留符號。
    2009-04-04
  • 簡單談?wù)凧avascript函數(shù)中的arguments

    簡單談?wù)凧avascript函數(shù)中的arguments

    在JavaScript中,arguments對象是比較特別的一個(gè)對象,實(shí)際上是當(dāng)前函數(shù)的一個(gè)內(nèi)置屬性。下面這篇文章主要介紹了關(guān)于Javascript函數(shù)中的arguments面貌以及如何轉(zhuǎn)化為數(shù)組的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-02-02
  • js創(chuàng)建對象的區(qū)別示例介紹

    js創(chuàng)建對象的區(qū)別示例介紹

    本節(jié)主要介紹了js 創(chuàng)建對象的區(qū)別,不同的賦值方式,導(dǎo)致的結(jié)果也不一樣,感興趣的朋友可以了解下
    2014-07-07

最新評論