JavaScript的eval()方法的使用
在做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()方法的使用相关推荐
- JavaScript中eval方法的替代方法
公司开设新的考核标准,着重对代码质量进行考核,用到的代码实时检测工具是sonaLint.用SonarLint进行代码检测的时候,会 出现对显示审查结果严重提示 Review the arguments ...
- Android中WebView加载本地Html,与JavaScript与Android方法相互传值(续)...
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010046908/article/details/51809558 接着上篇Android中Web ...
- JavaScript之eval() 函数
为什么80%的码农都做不了架构师?>>> 定义和用法 eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码. 语法 eval(string) 参数描述 ...
- java script eval_「eval」js中的eval方法详解(一)–eval方法的初级应用 - seo实验室...
eval 在我看来,js中的eval()方法就是一个js语言的执行器,它能把其中的参数按照javaScript语法进行解析并执行. 语法: eval(s); eval()方法中的参数s有多种情况.参数 ...
- JavaScript中eval()和$.parseJSON()的区别和联系以及JSON.stringify()的区别
JavaScript中eval()和$.parseJSON()的区别和联系以及JSON.stringify()的区别 一.第一个区别是:安全性 json格式非常受欢迎,而解析json的方式通常用JSO ...
- java 调用js脚本_Java中使用JavaScript脚本的方法步骤
简介 Nashorn Nashorn 一个 javascript 引擎. 从JDK 1.8开始,Nashorn取代Rhino(JDK 1.6, JDK1.7)成为Java的嵌入式JavaScript引 ...
- JS的eval()方法
定义和用法 eval() 函数计算 JavaScript 字符串,并把它作为脚本代码来执行. 如果参数是一个表达式,eval() 函数将执行表达式.如果参数是Javascript语句,eval()将执 ...
- js中的Eval方法
eval 方法 检查 JScript 代码并执行. eval(codeString) 必选项 codestring 参数是包含有效 JScript 代码的字符串值.这个字符串将由 JScript 分析 ...
- 这是如何更好地利用JavaScript数组的方法
by pacdiv 由pacdiv 这是如何更好地利用JavaScript数组的方法 (Here's how you can make better use of JavaScript arrays) ...
最新文章
- sqoop连接hive和mysql_用Sqoop进行Hive和MySQL之间的数据互导
- 第二十四章:页面导航(五)
- 模拟标准c++中的Rtti
- MySQL的四种不同查询的分析
- 嵌入式Linux初始化硬件RTC,嵌入式Linux系统中的快速启动技术研究
- 光功率 博科交换机_如何将交换机40G QSFP+与10G SFP+端口互连?
- 计算机rank函数怎么用积分排名,excelrank函数积分排名
- 人生苦短,我用python-- Day6 面向对象
- 当下流行的语音识别技术是不是发展错了方向?
- php 中正则表达式详解
- 《算法导论》第三版第7章 快速排序 练习思考题 个人答案
- 电脑网页截屏怎么截长图?借助Safari对整个网页进行长截图
- Github上找到开源的《植物大战僵尸》代码分享~
- 人脸服务器如何与门禁系统对接,人脸识别门禁与自动门接线图
- 2014年11月合肥黄山宏村之旅
- k8s集群搭建(亲测有效)
- 视频教程-opencv应用实例-实战视频教学-计算机视觉
- python爬12306_爬虫12306返回数据怎么解析
- WPS文字中通过宏加快捷键实现仿word中Lorem()函数的功能
- 关于LK详细解析介绍
热门文章
- first season seventh episode,The entire city is blacked out!(全城大停电,Chandler有好事???)
- Symbian--操作系统中的线程和进程
- 螺线管 Solenoid
- 密码学复习笔记4【公钥密码技术、RSA 、ElGamal】
- spring cloud config 端口总是8888的坑
- SDCC 2017·深圳站之架构峰会日程发布啦(附嘉宾和议题)
- 百花齐放的国产数据库,献礼国庆节
- 联想z5 android pie,买屏幕送手机?联想Z5一年使用体验总结
- [SSM]There is no getter for property named 'token_exptime' in 'class com.hdu.model.Student'
- 第六届“NOI与中小学计算机教育”论坛举办通知