JS 里面的 eval() 函数的作用和报错之后的处理 ...

将服务器端构建好的JSON数据转化为可用的JavaScript对象(另外简单的作用在下边)


使用时候报如下错误:


Uncaught SyntaxError: Unexpected token :


这是因为json字符串里面的value的值里面包含:冒号,所以在转化的时候出现错误。

如下格式就不会报错了。


objJson = eval("("+objJson+")") ;


添加上括号

"("+ objJson +")"    

这个就转化ok


在转化的时候需要将JSON字符串的外面包装一层圆括号

var jsonObject =eval("("+ jsonFormat +")");


为什么要加括号?


加上圆括号的目的是迫使eval函数在评估JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。

举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:

alert(eval("{}");// return undefined

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


2.另一个作用

eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。

该方法只接受原始字符串作为参数,如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回。因此请不要为 eval() 函数传递 String 对象来作为参数。

抛出异常的几种情况

如果参数中没有合法的表达式和语句,则抛出 SyntaxError 异常。

如果非法调用 eval(),则抛出 EvalError 异常。

如果传递给 eval() 的 Javascript 代码生成了一个异常,eval() 将把该异常传递给调用者。

<script type="text/javascript">

eval("x=10;y=20;document.write(x*y)")

document.write(eval("2+2"))

var x=10
document.write(eval(x+17))

</script>

输出:

200
4
27

转载于:https://www.cnblogs.com/jiangcq/p/7171801.html

在Java中调用MongoDB的自定义JavaScript方法时,通常会使用MongoDB Java驱动提供的`MongoTemplate`类的`executeCommand`方法。错误可能发生在多个层面,例如命令的书写格式、数据库权限问题、数据库连接问题、驱动版本与MongoDB版本的兼容性问题等。 首先,要确保你的JavaScript方法`test`是存在于MongoDB服务器上,并且已经正确定义。你需要使用`db.eval()`(在MongoDB 2.x版本中使用)或者在MongoDB 3.x及以后的版本中使用`db.runCommand()`来定义和执行自定义的JavaScript函数。 其次,需要注意的是,从MongoDB 4.4版本开始,`db.eval()`函数已被废弃,因为它可能会影响数据库的性能,并且带来安全问题。因此,如果你的MongoDB服务器版本较高,应该使用聚合管道或者MongoDB的其他方法来实现相似的功能。 如果你确实需要通过`MongoTemplate`来执行JavaScript代码,以下是一些可能需要检查的点: 1. 语法错误:检查你的JavaScript代码是否符合MongoDB的语法要求。 2. 权限问题:确保MongoDB服务器的用户有足够的权限来执行`eval`命令。 3. 数据库版本:检查你的MongoDB驱动版本是否与MongoDB服务器版本兼容。 4. 连接问题:确保你的Java应用程序能够正确地连接到MongoDB服务器。 以下是一个使用`executeCommand`方法执行JavaScript函数的示例代码片段: ```java @Autowired private MongoTemplate mongoTemplate; public void callCustomJsMethod() { try { // 使用eval函数执行JavaScript代码 // 注意:由于eval函数已被废弃,以下代码仅适用于MongoDB 4.4以下版本 Document result = mongoTemplate.executeCommand("{ 'eval': 'test(\"stb_coordinate\", \"2024\", \"08\")', 'args': [] }"); // 处理结果 System.out.println(result.toJson()); } catch (Exception e) { e.printStackTrace(); } } ``` 如果MongoDB版本大于4.4,你需要改用聚合管道或者MongoDB shell支持的其他方式来执行自定义JavaScript函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值