在做AJAX应用开发的时候,我们通常喜欢把服务器端返回的JSON格式字符串在客户端的回调函数中把它作为JavaScript代码执行并用一个变量保存起来,以方便使用返回的数据。
通常的做法就是var jsonData = eval(xmlHttp.responseText)。这看起来似乎一切都是正确的,但当你运行代码的时候,你会发现报“invalid labe”错误了。

例如:
第一次使用eval(),将后台写的json格式字符串处理成json对象数组

var jsonstr = “{name:’test’,age:18}”;

var jsonobj = eval(jsonstr);

错误提示:

SyntaxError: invalid label

写到这里老是报错,看着觉得都对,怎么会拿不到对象呢?

为什么会这样?

原因在于:eval本身的问题。 由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。

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

alert(eval(“{}”); // return undefined

alert(eval(“({})”);// return object[Object]

如何解决?

var josnobj = eval(“(“+jsonstr+”)”);

或者这样

eval(“var jsonobj = ” + jsonstr);

JavaScript的eval()方法的使用相关推荐

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

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

  2. Android中WebView加载本地Html,与JavaScript与Android方法相互传值(续)...

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010046908/article/details/51809558 接着上篇Android中Web ...

  3. JavaScript之eval() 函数

    为什么80%的码农都做不了架构师?>>>    定义和用法 eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码. 语法 eval(string) 参数描述 ...

  4. java script eval_「eval」js中的eval方法详解(一)–eval方法的初级应用 - seo实验室...

    eval 在我看来,js中的eval()方法就是一个js语言的执行器,它能把其中的参数按照javaScript语法进行解析并执行. 语法: eval(s); eval()方法中的参数s有多种情况.参数 ...

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

    JavaScript中eval()和$.parseJSON()的区别和联系以及JSON.stringify()的区别 一.第一个区别是:安全性 json格式非常受欢迎,而解析json的方式通常用JSO ...

  6. java 调用js脚本_Java中使用JavaScript脚本的方法步骤

    简介 Nashorn Nashorn 一个 javascript 引擎. 从JDK 1.8开始,Nashorn取代Rhino(JDK 1.6, JDK1.7)成为Java的嵌入式JavaScript引 ...

  7. JS的eval()方法

    定义和用法 eval() 函数计算 JavaScript 字符串,并把它作为脚本代码来执行. 如果参数是一个表达式,eval() 函数将执行表达式.如果参数是Javascript语句,eval()将执 ...

  8. js中的Eval方法

    eval 方法 检查 JScript 代码并执行. eval(codeString) 必选项 codestring 参数是包含有效 JScript 代码的字符串值.这个字符串将由 JScript 分析 ...

  9. 这是如何更好地利用JavaScript数组的方法

    by pacdiv 由pacdiv 这是如何更好地利用JavaScript数组的方法 (Here's how you can make better use of JavaScript arrays) ...

最新文章

  1. sqoop连接hive和mysql_用Sqoop进行Hive和MySQL之间的数据互导
  2. 第二十四章:页面导航(五)
  3. 模拟标准c++中的Rtti
  4. MySQL的四种不同查询的分析
  5. 嵌入式Linux初始化硬件RTC,嵌入式Linux系统中的快速启动技术研究
  6. 光功率 博科交换机_如何将交换机40G QSFP+与10G SFP+端口互连?
  7. 计算机rank函数怎么用积分排名,excelrank函数积分排名
  8. 人生苦短,我用python-- Day6 面向对象
  9. 当下流行的语音识别技术是不是发展错了方向?
  10. php 中正则表达式详解
  11. 《算法导论》第三版第7章 快速排序 练习思考题 个人答案
  12. 电脑网页截屏怎么截长图?借助Safari对整个网页进行长截图
  13. Github上找到开源的《植物大战僵尸》代码分享~
  14. 人脸服务器如何与门禁系统对接,人脸识别门禁与自动门接线图
  15. 2014年11月合肥黄山宏村之旅
  16. k8s集群搭建(亲测有效)
  17. 视频教程-opencv应用实例-实战视频教学-计算机视觉
  18. python爬12306_爬虫12306返回数据怎么解析
  19. WPS文字中通过宏加快捷键实现仿word中Lorem()函数的功能
  20. 关于LK详细解析介绍

热门文章

  1. first season seventh episode,The entire city is blacked out!(全城大停电,Chandler有好事???)
  2. Symbian--操作系统中的线程和进程
  3. 螺线管 Solenoid
  4. 密码学复习笔记4【公钥密码技术、RSA 、ElGamal】
  5. spring cloud config 端口总是8888的坑
  6. SDCC 2017·深圳站之架构峰会日程发布啦(附嘉宾和议题)
  7. 百花齐放的国产数据库,献礼国庆节
  8. 联想z5 android pie,买屏幕送手机?联想Z5一年使用体验总结
  9. [SSM]There is no getter for property named 'token_exptime' in 'class com.hdu.model.Student'
  10. 第六届“NOI与中小学计算机教育”论坛举办通知