1. 程式人生 > >JSON.parse(jsonStr)和eval('('+jsonStr+')')

JSON.parse(jsonStr)和eval('('+jsonStr+')')

解析 alert 藍色 判斷 什麽 代碼 修改 初始 推薦

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

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

  var jsonObj = eval( ‘(‘ + jsonDate + ‘)‘ ); // eval();方法

  var jsonObj = JSON.parse( jsonDate ); // JSON.parse(); 方法

然後在控制臺調用:

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

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

  var jsonDate = ‘{ "name":alert("hello"),"age":23 }‘

  var jsonObj = eval( ‘(‘ + jsonDate + ‘)‘ ); // eval();方法

  console.log( jsonObj.age ); //會先執行“alert”輸出“hello” 然後才輸出 23

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

  var jsonDate = ‘{ "name":alert("hello"),"age":23 }‘

  var jsonObj = JSON.parse( jsonDate ); // JSON.parse(); 方法

  cosole.log( jsonobj.age ) // 報錯 這個錯誤告訴我們這個字符串是不合法的

小結:“eval();”方法解析的時候不會去判斷字符串是否合法,而且json對象中的js方法也會被執行,這是非常危險的;而“JSON.parse();”方法的優點就不用多說了,推薦此方法。

JSON.parse(jsonStr)和eval('('+jsonStr+')')