Ajax中解析Json的兩種方法對比分析

來源:互聯網
上載者:User

   這裡給大家介紹的是Ajax中解析Json的兩種方法對比分析,十分的實用,本文為學習筆記,屬新手文章,歡迎指教!

  eval(); //此方法不推薦

  JSON.parse(); //推薦方法

  一、兩種方法的區別

  我們先初始化一個json格式的對象:

  ?

1 2 3 4 5   var jsonDate = '{ "name":"周星馳","age":23 }'     var jsonObj = eval( '(' + jsonDate + ')' ); // eval();方法     var jsonObj = JSON.parse( jsonDate ); // JSON.parse(); 方法

  然後在控制台調用:

  console.log( jsonObj.name ); // 兩種方法都可以正確輸入 周星馳

  那麼問題來了 兩種方法有什麼區別呢?(下面我們稍微把代碼改動一下,藍色字型為修改部分)

  ?

1 2 3 4 5   var jsonDate = '{ "name":alert("hello"),"age":23 }'     var jsonObj = eval( '(' + jsonDate + ')' ); // eval();方法     console.log( jsonObj.age ); //會先執行“alert”輸出“hello” 然後才輸出 23

  換“JSON.parse();”方法:

  ?

1 2 3 4 5   var jsonDate = '{ "name":alert("hello"),"age":23 }'     var jsonObj = JSON.parse( jsonDate ); // JSON.parse(); 方法     cosole.log( jsonobj.age ) // 報錯 這個錯誤告訴我們這個字串是不合法的

  小結:“eval();”方法解析的時候不會去判斷字串是否合法,而且json對象中的js方法也會被執行,這是非常危險的;而“JSON.parse();”方法的優點就不用多說了,推薦此方法。(不明白的盆友可以自己在控制台測試一下)

  二、擴充問題

   代碼如下:

  var jsonDate = '{ "name":"周星馳","age":23 }'

  大家可以看到在上面測試時一直用紅色把包在花括弧外面的引號標註了起來,這對引號是很關鍵卻又是常常被忽略的,因為 “eval();” 和 “JSON.parser();” 這兩個方法的參數只接受字串,也就是說只能解析字串!!

  那我不經會有一個思考,我們在初始化的時候若不加引號對,那麼它本身就是對象,js可以直接擷取對象本身的屬性和方法;為什麼還要加引號將它變成字串之後再用 “eval();” 或者 “JSON.parse();” 解析,這樣做不是既不環保又沒有效率嗎?

  原因很簡單:前端提供給背景只能是字串資料格式,後台返回給前台的就看返回的是什麼資料格式,是字串就必須解析之後再用。

  (這個小問題一般大家都會忽略掉,不太關注。我之所以好奇的原因也是因為對後台瞭解的不夠,把這個問題拋出來希望對後台不熟的朋友有所協助,知道是怎麼回事後自然而然會加深記憶,在開發過程中就不會漏掉了)

  以上所述就是本文的全部內容了,希望大家能夠喜歡。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.