var jsonStr = $('#jsonData').val();
var json = eval('('+jsonStr+')');
上面两行代码出自《用js模拟PHP的print_r功能
》,用来把接收到的json串转换为js中的对象。既然json串已经是一个完美的对象直接量了,为什么非要在两端加上括号,为什么不能做如下简写呢?
var json = eval(jsonStr);
看了周爱民老师的《JAVASCRIPT语言精髓与编程实践
》P264的 5.2.2“动态执行过程中的语句、表达式与值”,才明白。
-----------
原因
-----------
eval把传入参数中的大括号视为一个复合语句的标识!比如
{name: "MyName", value:1}
eval会按照如下步骤解析:
- 第一个冒号成了“标签声明”标识符;
- (“标签声明”的左操作数)name成了标签;
- “MyName”成了字符串直接量;
- value成了一个变量标识符;
- 第二个冒号不能合理地作语法分析,出现语法分析期异常;
- ……
试着执行如下代码:
alert(eval('{value:1}')); //1
如果加上小括号,就可以返回对象了:
alert(eval('({value:1})')); //对象
分享到:
相关推荐
在JavaScript中,括号用于改变运算顺序,表达式`a * (b + c)`会先计算括号内的`b + c`,然后将结果与`a`相乘。乘方运算(**)的优先级高于乘法和除法,而加法和减法的优先级相同,从左到右进行计算。求余运算(%)是...
在JavaScript中,`eval`函数是一个非常特殊的内置函数,它的主要作用是将接收到的字符串参数作为JavaScript代码来执行。在某些场景下,`eval`可以用来解析JSON字符串、动态执行代码或者处理一些特定的编程需求。然而...
在JavaScript中,`eval()`函数是一个非常特殊且强大的工具,它能够将字符串作为JavaScript代码执行。这个功能在处理动态生成的代码或者解析JSON时非常有用。然而,由于安全和性能问题,`eval()`通常被避免在生产环境...
`eval()`会将大括号视为代码块的开始和结束,而不是一个对象字面量。在这种情况下,它实际上什么都不会做,因为这是一个没有语句的代码块,所以返回`undefined`。 然而,当我们在JSON字符串前面添加一对括号时: ``...
例如,在业务逻辑中,你可以动态地根据用户的需求构建SQL查询语句,或者在游戏环境中,根据玩家的行为实时计算得分。这种动态执行表达式的能力,使得代码更加灵活,减少了硬编码,提升了代码的可维护性。 总结起来...
- 错误处理:当表达式无效或计算过程中出现错误时,expr-eval会抛出相应的错误信息,帮助开发者调试。 在实际应用中,expr-eval可用于实时计算、数据分析、图形绘制等多个场景。结合前端框架如React或Vue,开发者...
注意,这里在JSON字符串前添加了`( )`,这是因为`eval`在没有括号包裹的情况下,会尝试把其参数当作语句执行,而不仅仅是表达式。加了括号后,JSON字符串会被当作一个完整的JavaScript对象字面量来解析。 尽管`eval...
在JavaScript编程语言中,`eval`是一个全局函数,它的主要功能是接收一个字符串参数,该字符串应该包含有效的JavaScript代码,然后`eval`会尝试执行这些代码。如果字符串中的最后一条语句是一个表达式,则`eval`将...
在JavaScript中,`eval`通常用于处理JSON对象,因为JSON.stringify()方法会将JavaScript对象转换成一个JSON格式的字符串,而JSON.parse()则能将这个字符串解析回JavaScript对象。但出于安全考虑,直接使用`eval`解析...
本文实例分析了javascript中eval函数用法。分享给大家供大家参考。具体分析如下: eval()只有一个参数,如果传入的参数不是字符串,则直接返回这个参数。否则会将字符串当成js代码进行编译,如果编译失败则...
`eval()`的基本用法是接收一个字符串参数,这个字符串被视为JavaScript代码,并在当前作用域内执行。例如,上面的例子展示了如何使用`eval()`计算字符串中的数学表达式: ```javascript var the_unevaled_answer = ...
因为 eval 函数可以将用户的输入作为 JavaScript 代码来执行,这意味着如果用户输入的代码中包含恶意代码,那么可能会对我们的程序造成安全威胁。因此,在使用 eval 函数时,我们需要非常小心,确保用户的输入是安全...
如果直接使用`eval(str)`而不加小括号,会导致语法错误。这是因为`eval()`期望接收到的是可以执行的JavaScript代码,而不是一个简单的对象字面量。例如: ```javascript var str = '{"name":"hanzichi","age":10}';...
EVAL操作是ASP.NET中的一种绑定机制,可以将数据绑定到控件上,以便在页面上显示数据。Eval操作可以计算字符串,并绑定字段等功能。 在使用Eval操作时,需要注意以下几点: 1. 使用Bind()方法可以绑定字段,例如:...
### JavaScript中eval函数用法分析 #### 一、eval函数简介 `eval()`函数是JavaScript中的内置函数之一,用于解析并执行包含JavaScript代码的字符串。它只有一个参数,该参数可以是字符串或非字符串类型。 - **非...
ide-eval-resetter-2.3.5-c80a1d.zipide-eval-resetter-2.3.5-c80a1d.zipide-eval-resetter-2.3.5-c80a1d.zipide-eval-resetter-2.3.5-c80a1d.zipide-eval-resetter-2.3.5-c80a1d.zipide-eval-resetter-2.3.5-c80a1d...
`eval()`函数接收一个参数,这个参数必须是一个字符串。在执行时,`eval()`会将这个字符串当作可执行的代码来处理。例如,在JavaScript中,如果你有一个变量`code`存储了`"alert('Hello, World!')"`这样的字符串,...
在这个例子中,`eval()`接收一个字符串`code`,然后将其中的JavaScript语句执行,就像它们是直接写在源代码中一样。这使得`eval()`成为实现动态编程和代码注入的一种手段。 然而,`eval()`也存在显著的安全隐患。当...