eval()解析object出现Unexpected identifier异常
2016-12-02 17:35
260 查看
eval函数接收一个参数s,如果s不是字符串,则直接返回s。否则执行s语句。如果s语句执行结果是一个值,则返回此值,否则返回undefined。
如果想要使用eval这个函数的话,普通的String转换,直接写eval_r(s),即可,但是如果需要转换的是json对象的话,那么就需要包一层括号,即eval_r("("
+ json + ")");但是还有一种情况就是,如果在执行这个函数之前,调用了JSON.stringify(json)的话,就会把json转换成了string了,而再利用eval的时候就不需要加那个括号了。否则回报Unexpected identifier 的错误。
在初学JS的时候就知道这个函数,却一直没有了解过他的用途,也一直都是睁一只眼闭一只眼,这次来深入地了解一下这个函数的作用。
eval的作用其实很简单,就是把一段字符串传递给JS解释器,由Javascript解释器将这段字符串解释成Javascript代码,并且执行他。语法为 eval_r(string),string 必需。要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句。通过计算 string 得到的值(如果有的话)。
该方法只接受原始字符串作为参数,如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回。因此请不要为 eval_r() 函数传递 String 对象来作为参数。
如果试图覆盖 eval 属性或把 eval_r() 方法赋予另一个属性,并通过该属性调用它,则 ECMAScript 实现允许抛出一个 EvalError 异常。
如果参数中没有合法的表达式和语句,则抛出 SyntaxError 异常。如果非法调用 eval_r(),则抛出 EvalError 异常。如果传递给 eval_r() 的 Javascript 代码生成了一个异常,eval_r() 将把该异常传递给调用者。
举个最简单的例子:
eval_r("alert(1+1)");
很简单,把字符串解释成JS代码并执行,弹出2。
当然,上面的例子只是个玩具,在实际中没有人会傻到这么用。我想大家最基本的使用eval函数都是应该在DOM中,例如我们有div1,div2,div3,那么在document.getElementByIdx_x时我们的ID没有办法去得到,那么最简单的办法就是在for循环中,使用eval来拼接这么一段程序。例如这样:
for (var loop = 1; loop < 10; loop++)
{
eval_r('document.getElementByIdx_x("div"+loop).innerHTML="123"');
}
最基本的用法说完,相信大家还是对这个函数意犹未尽,如果这个函数只有这么点用法,那就太无聊了。那我们就一点点来剖下一下eval_r()函数。
如果想要使用eval这个函数的话,普通的String转换,直接写eval_r(s),即可,但是如果需要转换的是json对象的话,那么就需要包一层括号,即eval_r("("
+ json + ")");但是还有一种情况就是,如果在执行这个函数之前,调用了JSON.stringify(json)的话,就会把json转换成了string了,而再利用eval的时候就不需要加那个括号了。否则回报Unexpected identifier 的错误。
在初学JS的时候就知道这个函数,却一直没有了解过他的用途,也一直都是睁一只眼闭一只眼,这次来深入地了解一下这个函数的作用。
eval的作用其实很简单,就是把一段字符串传递给JS解释器,由Javascript解释器将这段字符串解释成Javascript代码,并且执行他。语法为 eval_r(string),string 必需。要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句。通过计算 string 得到的值(如果有的话)。
该方法只接受原始字符串作为参数,如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回。因此请不要为 eval_r() 函数传递 String 对象来作为参数。
如果试图覆盖 eval 属性或把 eval_r() 方法赋予另一个属性,并通过该属性调用它,则 ECMAScript 实现允许抛出一个 EvalError 异常。
如果参数中没有合法的表达式和语句,则抛出 SyntaxError 异常。如果非法调用 eval_r(),则抛出 EvalError 异常。如果传递给 eval_r() 的 Javascript 代码生成了一个异常,eval_r() 将把该异常传递给调用者。
举个最简单的例子:
eval_r("alert(1+1)");
很简单,把字符串解释成JS代码并执行,弹出2。
当然,上面的例子只是个玩具,在实际中没有人会傻到这么用。我想大家最基本的使用eval函数都是应该在DOM中,例如我们有div1,div2,div3,那么在document.getElementByIdx_x时我们的ID没有办法去得到,那么最简单的办法就是在for循环中,使用eval来拼接这么一段程序。例如这样:
for (var loop = 1; loop < 10; loop++)
{
eval_r('document.getElementByIdx_x("div"+loop).innerHTML="123"');
}
最基本的用法说完,相信大家还是对这个函数意犹未尽,如果这个函数只有这么点用法,那就太无聊了。那我们就一点点来剖下一下eval_r()函数。
相关文章推荐
- ObjectMapper处理从远程获取的Object对象
- android.widget.LinearLayout.addView(android.view.View)' on a null object reference
- objective-c多种排序算法图形化演示
- Swift 微信SDK中WXApi.h 和WXApiObject.h有关报错修改方法
- Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法
- Object类
- The ServiceClass object does not implement the required method in the following form: OMElement sayHello(OMElement e)
- Notice: Trying to get property of non-object problem(PHP)解决办法 中间件只能跳转不能返任何数据
- Object-c 中截取包含(中、英文、表情符号emojiicon)混合字符串的每个字符并获取此字符的unicode值
- json 转 object
- java 对象流的使用示例-- ObjectOutputStream
- JSONObject 的简单使用
- 使用ObjectDataProvider 将函数应用到绑定
- objective-c的单例模式测试
- mybatis bug之resultmap缺少object-relation匹配参数password,造成设置密码不成功
- JSONObject与JSONArray的使用
- 关于object类的初次认识
- Interlude: Troubleshooting for 'Invalid object name'
- objective-c的description测试
- Objective-C语言Foundation框架