您的位置:首页 > 移动开发 > Objective-C

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()函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: