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

JSON在Javascript中的使用(eval和JSON.parse的區(qū)別)詳細(xì)解析

 更新時間:2017年09月05日 09:44:39   作者:babulongbo  
這篇文章主要介紹了JSON在Javascript中的使用以及eval和JSON.parse的區(qū)別詳細(xì)解析,本文對eval()和JSON.parse()的區(qū)別介紹的非常詳細(xì),需要的朋友可以參考下

 JSON 和XML比較

json的長度和xml比起來更加短小

json讀取速度更快

json可以使用JavaScript的內(nèi)置方法直接進(jìn)行解析,轉(zhuǎn)化成javascript對象,非常方便。

在Javascript使用eval將接送轉(zhuǎn)化為json對象

var jsonData = '{"persons":{"name":"成龍","age":58},{"name":"吳京","age":33},"name":"甄子丹","age":44}';
var jsonObj = eval('('+jsonData+')');
//訪問json對象數(shù)組的第一個對象的name屬性
console.log(jsonObj.persons[0].name);

在Javascript使用JSON.parse將接送轉(zhuǎn)化為json對象

var jsonData = '{"persons":{"name":"成龍","age":58},{"name":"吳京","age":33},"name":"甄子丹","age":44}';
var jsonObj = JSON.parse(jsonData);
//訪問json對象數(shù)組的第一個對象的name屬性
console.log(jsonObj.persons[0].name);

但是eval方法很不安全,例如:

var jsonData = '{"persons":{"name":"成龍","age":window.alert(123)},{"name":"吳京","age":33},"name":"甄子丹","age":44}';
var jsonObj = eval('('+jsonData+')');
//訪問json對象數(shù)組的第一個對象的name屬性
console.log(jsonObj.persons[0].name);

將age的值換成了Javascript代碼,依然可以解析,加入有人惡意修改這個代碼,那么就會造成嚴(yán)重后果。

但是JSON.parse不同

var jsonData = '{"persons":{"name":"成龍","age":window.alert(123)},{"name":"吳京","age":33},"name":"甄子丹","age":44}';
var jsonObj = JSON.parse(jsonData);
//訪問json對象數(shù)組的第一個對象的name屬性
console.log(jsonObj.persons[0].name);

瀏覽器會檢查出json中的不合理的代碼,并報(bào)告錯誤

所以推薦使用JSON.parse

PS:下面在單獨(dú)介紹下eval()和JSON.parse()的區(qū)別

我們將一個字符串解析成json對象時可以使用兩種方法:

假設(shè)我們有一個json格式的字符串:

'{
 "student" : [
  {"name":"鳴人","age":17}, 
  {"name":"小櫻","age":17},
  {"name":"佐助","age":17}
 ]
}'

然后我們需要把它解析成json對象

1、eval()代碼如下:

var data = '{"student" : [{"name":"鳴人","age":17}, {"name":"小櫻","age":17},{"name":"佐助","age":17}]}';
eval('(' + data + ')');

2、JSON.parse()代碼如下:

var data = '{"student" : [{"name":"鳴人","age":17}, {"name":"小櫻","age":17},{"name":"佐助","age":17}]}';
JSON.parse(data);

區(qū)別:eval方法不會去檢查給的字符串時候符合json的格式~同時如果給的字符串中存在js代碼eval也會一并執(zhí)行~比如如果上面的json格式的字符串改為:(注意紅色部分)

var data = '{"student" : [{"name":"鳴人","age":17}, {"name":"小櫻","age":alert("hehe")},{"name":"佐助","age":17}]}';

此時執(zhí)行eval方法后會先彈出一個提示框輸出hehe的字符串~

但是使用JSON.parse()就會報(bào)錯~顯示錯誤信息為當(dāng)前字符串不符合json格式~即JSON.parse()方法會檢查需要轉(zhuǎn)換的字符串是否符合json格式~

相比較而言eval方法是很危險的~特別是當(dāng)涉及到第三方時我們需要確保傳給eval的參數(shù)是我們可以控制的~不然里面插入比如window.location~指向一個惡意的連接~那叫叫天啦

從這個層面講~還是推薦使用JSON.parse來實(shí)現(xiàn)json格式字符串的解析

考慮到我們在制造json格式的字符串時極易出現(xiàn)錯誤~這里推薦一個json格式字符串的在線校驗(yàn)工具:http://jsonlint.com/

相關(guān)文章

  • JavaScript實(shí)現(xiàn)更換頭像功能

    JavaScript實(shí)現(xiàn)更換頭像功能

    這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)更換頭像功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 詳解webpack的配置文件entry與output

    詳解webpack的配置文件entry與output

    本篇文章主要介紹了webpack的配置文件entry與output,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • webpack v4 從dev到prd的方法

    webpack v4 從dev到prd的方法

    這篇文章主要介紹了webpack v4 從dev到prd的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • JavaScrip數(shù)組刪除特定元素的幾種方法總結(jié)

    JavaScrip數(shù)組刪除特定元素的幾種方法總結(jié)

    從js數(shù)組中刪除指定元素是我們每個人都遇到的問題,網(wǎng)上這方面的資料也很多,但有的時間過于久遠(yuǎn),有的內(nèi)容不夠全面,所以自己來整理下,這篇文章主要給大家總結(jié)介紹了關(guān)于JavaScrip數(shù)組刪除特定元素的多種方法,需要的朋友可以參考下。
    2017-09-09
  • JS圖片預(yù)加載 JS實(shí)現(xiàn)圖片預(yù)加載應(yīng)用

    JS圖片預(yù)加載 JS實(shí)現(xiàn)圖片預(yù)加載應(yīng)用

    由于圖片加載慢,導(dǎo)致用戶體驗(yàn)特別差,本文將介紹一種圖片預(yù)加載技術(shù),需要了解的朋友可以參考下
    2012-12-12
  • JavaScript創(chuàng)建閉包的兩種方式的優(yōu)劣與區(qū)別分析

    JavaScript創(chuàng)建閉包的兩種方式的優(yōu)劣與區(qū)別分析

    這篇文章主要介紹了JavaScript創(chuàng)建閉包的兩種方式的優(yōu)劣與區(qū)別分析的相關(guān)資料,需要的朋友可以參考下
    2015-06-06
  • JS常見問題之為什么點(diǎn)擊彈出的i總是最后一個

    JS常見問題之為什么點(diǎn)擊彈出的i總是最后一個

    最近有很多朋友問我,為什么點(diǎn)擊彈出的i總是最后一個,于是抽時間寫了這篇文章,特此分享到腳本之家平臺,供大家參考
    2016-01-01
  • JavaScript常用腳本匯總(二)

    JavaScript常用腳本匯總(二)

    本文給大家分享的javascript常用腳本有把JavaScript中的偽數(shù)組轉(zhuǎn)換為真數(shù)組、JavaScript設(shè)置主頁功能、JavaScript收藏功能、javascript檢測元素是否支持某個屬性代碼、創(chuàng)建和使用命名空間,有需要的小伙伴們快來看看吧。
    2015-03-03
  • 淺談js中test()函數(shù)在正則中的使用

    淺談js中test()函數(shù)在正則中的使用

    下面小編就為大家?guī)硪黄獪\談js中test()函數(shù)在正則中的使用。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • JS驗(yàn)證碼實(shí)現(xiàn)代碼

    JS驗(yàn)證碼實(shí)現(xiàn)代碼

    本文通過實(shí)例代碼給大家分享基于javascript實(shí)現(xiàn)的驗(yàn)證碼功能,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-09-09

最新評論