1.eval()与JSOn.parse的不同

eval()

    var c = 1; //全局变量

    var jsonstr1 = '{"name":"a","company":"b","value":++c}';

    var json1 = eval('(' + jsonstr1 + ')');

    console.log(json1.value);
  

c是全局变量为1,但是经过eval的解析,全局变量变成了2!(这样的写法是危险的)

JSON.parse

    var c = 1; //全局变量

    var jsonstr1 = '{"name":"a","company":"b","value":++c}';

    var json2 = JSON.parse(jsonstr1);

    console.log(json2.value);
  

IE下报错:

谷歌下报错:

而JSON.parse则会报错。

2.在++c中加上双引号则就可以,因为它变成字符串了。

 var c = 1; //全局变量

    var jsonstr1 = '{"name":"a","company":"b","value":“++c”}';

    var json2 = JSON.parse(jsonstr1);

    console.log(json2.value);

结果:

3.我想很多人在纠结双引号的问题,这里我们就来集中测试下。

   a:JSON.parse

var c = 1; //全局变量
var date = new Date();
console.log(date.toLocaleDateString());
//var jsonstr1 = '{"name":"a","company":"b","value":"++c"}';//键,值都有双引号
var jsonstr2 = '{"name":"a","company":"b","value":++c}';//仅++c上午双引号
//var jsonstr3 = '{name:"a",company:"b",value:"++c"}';//仅有值上有双引号
//var jsonstr4 = '{name:a,company:b,value:++c}';//全无双引号 //var json1 = JSON.parse(jsonstr1);
var json2 = JSON.parse(jsonstr2);
//var json3 = JSON.parse(jsonstr3);
//var json4 = JSON.parse(jsonstr4); //console.log(json1 );
console.log(json2 );
//console.log(json3);
//console.log(json4);

结果依次为:

可见JSON.parse中只有第一种标准形式才会解析正确

b:eval()

var c = 1; //全局变量
var date = new Date();
console.log(date.toLocaleDateString()); var jsonstr1 = '{"name":"a","company":"b","value":"++c"}';//键,值都有双引号
//var jsonstr2 = '{"name":"a","company":"b","value":++c}';//仅++c上午双引号
//var jsonstr3 = '{name:"a",company:"b",value:"++c"}';//仅有值上有双引号
//var jsonstr4 = '{name:a,company:b,value:++c}';//全无双引号 var json1 = eval('('+jsonstr1+')');
//var json2 = eval('('+jsonstr2+')');
//var json3 = eval('('+jsonstr3+')');
//var json4 = eval('('+jsonstr4+')'); console.log(json1+" "+json1.value );
//console.log(json2+" "+json2.value );
//console.log(json3 + " " + json3.value);
//console.log(json4+" "+json3.value);

结果依次为:

而eval中除了最后一种,其他都解析正确。

4.这时候还有一个问题:那就是为什么eval()解析的时候要加上括号?

我们先看看不加括号会怎么样:

var c = 1; //全局变量
var date = new Date();
console.log(date.toLocaleDateString()); var jsonstr1 = '{"name":"a","company":"b","value":"++c"}';//键,值都有双引号 var json1 = eval(jsonstr1); console.log(json1+" "+json1.value );

结果:

这里不加就出错了。

那是因为eval()相当于一个执行环境,当你不加括号的时候,jsonstr1会被认为是一条复合语句。运行的时候就会逐个字符的解析。

但是加上括号的时候,jsonstr1就当做一个表达式去运算。从括号开始就被当做了对象进行识别。


5.然后你又会想到,那这个括号为什么要加“()”,不能加“{}”么?

答案是:当然能加“{}”,只不过就会报错而已~。— —!

这时候你要明吧json的格式是什么!

{"name":"a","company":"b"} 这就是标准形式。

JSON.parse 与 eval() 对于解析json的问题的更多相关文章

  1. JSON.parse与eval

    文章:JSON.parse 与 eval() 对于解析json的问题 json的标准格式:{"name":"jobs"}   名字和值都必须用双引号引起来.

  2. JSON.parse和eval的区别

    JSON.parse和eval的区别 JSON(JavaScript Object Notation)是一种轻量级的数据格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是Jav ...

  3. JSON.parse与eval的区别

    JSON.parse与eval和能将一个字符串解析成一个JSON对象,但还是有挺大区别. 测试代码 var A = "{ a: 1 , b : 'hello' }"; var B ...

  4. [转]javascript eval函数解析json数据时为什加上圆括号eval("("+data+")")

    javascript eval函数解析json数据时为什么 加上圆括号?为什么要 eval这里要添加 “("("+data+")");//”呢?   原因在于: ...

  5. JSON.stringify()、JSON.parse()和eval(string)

    1.JSON.stringify()用于从一个对象解析出字符串,eg: var obj = {"name":"奔跑的蜗牛","age":&q ...

  6. 用JSON.parse和eval出现的问题

    json格式非常受欢迎,而解析json的方式通常用JSON.parse()但是eval()方法也可以解析,这两者之间有什么区别呢? JSON.parse()之可以解析json格式的数据,并且会对要解析 ...

  7. Js中JSON.stringify()与JSON.parse()与eval()详解及使用案例

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.因为采用独立于语言的文本格式,也使用了类似于C语言家族的习惯,拥有了这些特性使使JSON称为理想的数据交换语 ...

  8. JSON.parse()和eval()的区别

    json格式非常受欢迎,而解析json的方式通常用JSON.parse()但是eval()方法也可以解析,这两者之间有什么区别呢? JSON.parse()之可以解析json格式的数据,并且会对要解析 ...

  9. JS中JSON.parse和eval的异同

    1.相同点 JSON.parse和eval函数都可将一段json字符串转换为json对象,如: var json = '{"intro":[{"name":&q ...

随机推荐

  1. 采用MiniProfiler监控EF与.NET MVC项目(Entity Framework 延伸系列1)

    前言 Entity Framework 延伸系列目录 今天来说说EF与MVC项目的性能检测和监控 首先,先介绍一下今天我们使用的工具吧. MiniProfiler~ 这个东西的介绍如下: MVC Mi ...

  2. 探真无阻塞加载javascript脚本技术,我们会发现很多意想不到的秘密

    下面的图片是我使用firefox和chrome浏览百度首页时候记录的http请求 下面是firefox: 下面是chrome: 在浏览百度首页前我都将浏览器的缓存全部清理掉,让这个场景最接近第一次访问 ...

  3. SQLServer地址搜索性能优化例子

    这是一个很久以前的例子,现在在整理资料时无意发现,就拿出来再改写分享. 1.需求 1.1 基本需求: 根据输入的地址关键字,搜索出完整的地址路径,耗时要控制在几十毫秒内. 1.2 数据库地址表结构和数 ...

  4. CSS浮动、定位

    这几天有空,整理了关于CSS浮动和定位的一些知识点,有什么欠缺的地方,欢迎大家批评指正. 一.文档流的概念指什么?有哪种方式可以让元素脱离文档流? 文档流,指的是元素排版布局过程中,元素会自动从左往右 ...

  5. 【Web动画】SVG 实现复杂线条动画

    在上一篇文章中,我们初步实现了一些利用基本图形就能完成的线条动画: [Web动画]SVG 线条动画入门 当然,事物都是朝着熵增焓减的方向发展的,复杂线条也肯定比有序线条要多. 很多时候,我们无法人工去 ...

  6. UWP开发之Mvvmlight实践八:为什么事件注销处理要写在OnNavigatingFrom中

    前一段开发UWP应用的时候因为系统返回按钮事件(SystemNavigationManager.GetForCurrentView().BackRequested)浪费了不少时间.现象就是在手机版的详 ...

  7. 微软开源代码编辑器monaco-editor

    官网上给出:”The Monaco Editor is the code editor that powers VS Code. A good page describing the code edi ...

  8. Mysql - 增删改

    因为项目原因, mysql用了两年了, 但是一直都未曾去总结过. 最近也是领导让总结项目, 才想起把mysql的使用小结一下. 一. Create 1. 单条插入, sql格式: insert int ...

  9. 自制Azure中国版“加血包”

    Micrsoft Azure中国版的国际出口最近升级为电话线拨号模式,目测为10个用户共享一条56kb的电话线拨号链路.有图有真相: 中国的IT从业者,有三分之一的职业生涯时间是在跟网络斗智斗勇.这点 ...

  10. 亡命之徒aaaaaa.......chao

    前端是一个看似入门门槛不高,但要学好很难的领域.前端的知识体系庞杂又松散,技术演进快,如果摸不清脉络的话很容易陷入盲人摸象的困境甚至跑偏.其实只要掌握了正确的方法,学习前端和学好前端就只是个时间问题. ...