zoukankan      html  css  js  c++  java
  • JS中JSON.parse和eval的异同

    1、相同点

    JSON.parse和eval函数都可将一段json字符串转换为json对象,如:

    var json = '{"intro":[{"name":"lucy", "sex":"male"},{"name":"polly","sex":"male"}]}';
    var res1 = eval('(' + json + ')');
    var res2 = JSON.parse(json);
    console.log(res1.intro[0].name); // lucy
    console.log(res2.intro[1].sex); // male

    2、不同点

    JSON.parse将数据转换为 JS 对象时,会检测数据是否是标准的json格式,只解析属性名是双引号包裹的字符串对象,

    并会忽略换行和空格,并能捕捉JSON中的语法错误,而eval函数可解析包含js语句的json字符串。JSON.parse的安全性更高。

    var json = '{"intro":[{"name":"lucy", "sex":"male"},{"name":"polly","sex":alert("unkown")}]}';
    var res1 = eval('(' + json + ')');
    console.log(res1.intro[0].name); // lucy

    当json字符串中含有js代码时,eval函数可执行其中的js代码,安全性低。

    var json = '{"intro":[{"name":"lucy", "sex":"male"},{"name":"polly","sex":alert("unkown")}]}';
    var res2 = JSON.parse(json); // 报错 VM134:1 Uncaught SyntaxError: Unexpected token a in JSON at position 62 at JSON.parse (<anonymous>)
    console.log(res2.intro[1].sex); 

    当json字符串中含有js代码时,JSON.parse报错,安全性高。

  • 相关阅读:
    CF460 A. Vasya and Socks
    HDU-2159FATE(二维完全背包)
    HDU-2844 Coins(多重背包)
    POJ 1014 Dividing(多重背包)
    HDU2191(多重背包)
    数据结构课程设计:稀疏矩阵(加、减、乘、求逆矩阵)
    (转载)线段树模板(来自胡浩大牛)
    poj2386(简单dfs)
    Poj1852
    poj2109
  • 原文地址:https://www.cnblogs.com/splendid/p/10373152.html
Copyright © 2011-2022 走看看