JavaScript中eval()和$.parseJSON()的区别和联系以及JSON.stringify()的区别

一、第一个区别是:安全性

json格式非常受欢迎,而解析json的方式通常用JSON.parse()但是eval()方法也可以解析,这两者之间有什么区别呢?JSON.parse()之可以解析json格式的数据,并且会对要解析的字符串进行格式检查,如果格式不正确则不进行解析,而eval()则可以解析任何字符串,eval是不安全的

var str = 'alert(1000.toString())';
eval(str);
JSON.parse(str);

用eval可以解析,并且会弹出对话框,而用JSON.parse()则解析不了。 其实alert并没有什么坏处,可怕的是如果用恶意用户在json字符串中注入了向页面插入木马链接的脚本,用eval也是可以操作的,而用JSON.parse()则不必担心这个问题。

注意:某些低级的浏览器尚不支持JSON.parse() 《高性能Javascript》一书即指出:警告:关于JSON和eval需要注意的是:在代码中使用eval是很危险的,特别是用它执行第三方的JSON数据(其中可能包含恶意代码)时,尽可能使用JSON.parse()方法解析字符串本身。该方法可以捕捉JSON中的语法错误,并允许你传入一个函数,用来过滤或转换解析结果。如果此方法以备Firfox 3.5 、IE8 及 Safari 4 原生支持。大多数javascript类库包含的JSON解析代码会直接调用原生版本,如果没有原生支持的话,会调用一个略微不那么强大的非原生版本来处理。

二、 第二个区别:JSON.parse()解析的必须是json格式的字符串要不报错,而eval()则没有这么严格

在这里“json格式的字符串”是指要求指定的字符串必须符合严格的JSON格式,例如:属性名称必须加双引号、字符串值也必须用双引号。
如果传入一个格式不"完好"的JSON字符串将抛出一个JS异常 json的解析方法共有两种:eval 和 JSON.parse(),如:

var jsonStr= '{"name":"lulu", "sex":"female"}';
var evalJson=eval('('+jsonStr+')');
var jsonParseJson=JSON.parse(jsonStr);

这样就把json格式的字符串jsonStr转换成了JSON对象。
但是区别是:

var age = 27;
var jsonStr= '{"name":"lulu", "sex":"female","age":++age}';
var evalJson=eval('('+jsonStr+')'); //不报错此时age的值是28
var jsonParseJson=JSON.parse(jsonStr);//报错

从上面eval()函数的用法我们可以看出eval()函数在解析json格式的字符串时要加上圆括号如eval(’(’+jsonStr+’)’),这是因为:eval本身的问题。 由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。

加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。

三、JSON.stringify()

JSON.stringify()是把json数据转化成json格式的字符串如:

var jsonObj = {"name":"lulu","sex":"female"};
var jsonStr = JSON.stringify(jsonObj);

JavaScript中eval()和$.parseJSON()的区别和联系以及JSON.stringify()的区别相关推荐

  1. 【javaScript】JavaScript中一个等号、二个等号、 三个等号 的区别(详细例子)

    一.单等于号 1.单等于号具有赋值作用 我们在定义变量时,会对变量进行赋值,例如a=1,就是把1赋值给a. 这就是在初始化对象的时候进行赋值. 2.单等于号具有引用对象作用 比如我们写了 var a ...

  2. JSON.parse()和JSON.stringify()的区别

    一.JSON.parse()用于从一个字符串中解析出json对象. 举例: var str = '{"name":"test","age": ...

  3. php 中eval 和javascript中eval有什么区别,DataBinder.Eval与Eval区别分析

    在asp.net编程中,缩短的Eval语法与DataBinder.Eval的不同点在于: Eval会根据最近的容器对象(例如DataListItem)的DataItem属性来自动地解析字段,而Data ...

  4. javascript中while循环、do....while与for循环的用法和区别

    while语法: 1.while语法: while(循环条件){ 循环主体; } 计算表达式的值,当值为真(非0)时,则 执行循环体语句. 例: <script type="text/ ...

  5. JavaScript中eval()函数

    eval调用时,实例为eval( "( javascript代码 )" ), eval() 函数可将字符串转换为代码执行,并返回一个或多个值. 转载于:https://www.cn ...

  6. JavaScript中eval方法的替代方法

    公司开设新的考核标准,着重对代码质量进行考核,用到的代码实时检测工具是sonaLint.用SonarLint进行代码检测的时候,会 出现对显示审查结果严重提示 Review the arguments ...

  7. JavaScript中一个等号、二个等号、 三个等号 的区别

    一个等号是赋值操作,==先转换类型再比较,===先判断类型,如果不是同一类型直接为false. === 判断规则 如果类型不同,就[不相等]  如果两个都是数值,并且是同一个值,那么[相等]:(!例外 ...

  8. Post请求中加不加@RequestBody的区别和formedata与JSON传递的区别

    package com.atguigu.boot.controller;import org.springframework.web.bind.annotation.PostMapping; impo ...

  9. JSON.parse()与JSON.stringify()的区别

    优质参考资料:https://www.cnblogs.com/goatling/p/6293692.html 转载于:https://www.cnblogs.com/wang-min/p/104458 ...

最新文章

  1. 在Mac上使用pip3安装python的数据统计模块实录
  2. python函数注释 参数 省略号_python – make函数在help()函数中有参数的省略号
  3. 三大技术突破,网易云信实现在线音乐教育极速上线
  4. k8s Service之LoadBalancer和ExternalName
  5. 前端学习(3124):react-hello-react之props的简写
  6. 赛尔原创 | N-LTP:基于预训练模型的中文自然语言处理平台
  7. 【linux】Linux配置环境变量
  8. Supervisord管理
  9. 公司来的新同事能力没我强,但是工资比我高,我应该提出加薪还是选择辞职?
  10. Beetl 性能揭秘 1 :如何输出一个整型变量
  11. Prometheus监控(二)
  12. 单元格自适应宽度_Excel – 合并单元格时,如何同时保留每个单元格的内容?...
  13. 中标麒麟的下载和安装
  14. jane street market prediction 冠军方案 经验分享 (1/3)
  15. python导入自定义模块_python引入不同文件夹下的自定义模块方法
  16. 我的CSDN之旅:2020年终总结
  17. shell小数点前不打0_shell十三问:关于${0##*/} 和${0%/*}
  18. 虹科方案 | 虹科基于空口测试的新型5G毫米波测试方案
  19. matlab勾股定理,勾股定理的两个物理证明
  20. 要学计算机买macbook,我是学平面设计的,买苹果电脑需要什么样的配置以上?...

热门文章

  1. 一不小心,老司机又翻车了
  2. Spring Cloud with Turbine
  3. 在SPS中直接查看用HTML格式阅读Office文档
  4. iOS---UICollectlionView 的使用
  5. 桂电在linux、Mac OS环境下使用出校器(支持2.14)
  6. 云计算是否为数据仓储做好了准备呢?
  7. [JS] 001_JavaScript基础增强
  8. zlib源码导读[转]
  9. Ubuntu设置局域网Windows共享文件Samba
  10. 工作中常用的linux命令,Linux工作中常用到的一些命令(持续更新)常用的