`
muyu
  • 浏览: 223279 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

eval会把参数中的大括号视作复合语句的标识

阅读更多
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会按照如下步骤解析:

  1. 第一个冒号成了“标签声明”标识符;
  2. (“标签声明”的左操作数)name成了标签;
  3. “MyName”成了字符串直接量;
  4. value成了一个变量标识符;
  5. 第二个冒号不能合理地作语法分析,出现语法分析期异常;
  6. ……

 

试着执行如下代码:

alert(eval('{value:1}')); //1

 如果加上小括号,就可以返回对象了:

alert(eval('({value:1})')); //对象
0
0
分享到:
评论

相关推荐

    计算器运算逻辑实现(带括号,求余,乘方,加减乘除),不使用eval函数-前端JavaScript 源码实现-括号匹配与初等运算

    在JavaScript中,括号用于改变运算顺序,表达式`a * (b + c)`会先计算括号内的`b + c`,然后将结果与`a`相乘。乘方运算(**)的优先级高于乘法和除法,而加法和减法的优先级相同,从左到右进行计算。求余运算(%)是...

    JS中的eval 为什么加括号

    在JavaScript中,`eval`函数是一个非常特殊的内置函数,它的主要作用是将接收到的字符串参数作为JavaScript代码来执行。在某些场景下,`eval`可以用来解析JSON字符串、动态执行代码或者处理一些特定的编程需求。然而...

    java实现js中eval功能

    在JavaScript中,`eval()`函数是一个非常特殊且强大的工具,它能够将字符串作为JavaScript代码执行。这个功能在处理动态生成的代码或者解析JSON时非常有用。然而,由于安全和性能问题,`eval()`通常被避免在生产环境...

    为什么JS中eval处理JSON数据要加括号

    `eval()`会将大括号视为代码块的开始和结束,而不是一个对象字面量。在这种情况下,它实际上什么都不会做,因为这是一个没有语句的代码块,所以返回`undefined`。 然而,当我们在JSON字符串前面添加一对括号时: ``...

    Z.Expressions.Eval 4.0.68.zip

    例如,在业务逻辑中,你可以动态地根据用户的需求构建SQL查询语句,或者在游戏环境中,根据玩家的行为实时计算得分。这种动态执行表达式的能力,使得代码更加灵活,减少了硬编码,提升了代码的可维护性。 总结起来...

    前端项目-expr-eval.zip

    - 错误处理:当表达式无效或计算过程中出现错误时,expr-eval会抛出相应的错误信息,帮助开发者调试。 在实际应用中,expr-eval可用于实时计算、数据分析、图形绘制等多个场景。结合前端框架如React或Vue,开发者...

    巧用eval解析json对象

    注意,这里在JSON字符串前添加了`( )`,这是因为`eval`在没有括号包裹的情况下,会尝试把其参数当作语句执行,而不仅仅是表达式。加了括号后,JSON字符串会被当作一个完整的JavaScript对象字面量来解析。 尽管`eval...

    javascript eval和JSON

    在JavaScript编程语言中,`eval`是一个全局函数,它的主要功能是接收一个字符串参数,该字符串应该包含有效的JavaScript代码,然后`eval`会尝试执行这些代码。如果字符串中的最后一条语句是一个表达式,则`eval`将...

    eval 加密和解密

    在JavaScript中,`eval`通常用于处理JSON对象,因为JSON.stringify()方法会将JavaScript对象转换成一个JSON格式的字符串,而JSON.parse()则能将这个字符串解析回JavaScript对象。但出于安全考虑,直接使用`eval`解析...

    javascript中eval函数用法分析

    本文实例分析了javascript中eval函数用法。分享给大家供大家参考。具体分析如下: eval()只有一个参数,如果传入的参数不是字符串,则直接返回这个参数。否则会将字符串当成js代码进行编译,如果编译失败则...

    在Javascript中Eval函数的使用.doc

    `eval()`的基本用法是接收一个字符串参数,这个字符串被视为JavaScript代码,并在当前作用域内执行。例如,上面的例子展示了如何使用`eval()`计算字符串中的数学表达式: ```javascript var the_unevaled_answer = ...

    Javascript中eval函数的用法

    因为 eval 函数可以将用户的输入作为 JavaScript 代码来执行,这意味着如果用户输入的代码中包含恶意代码,那么可能会对我们的程序造成安全威胁。因此,在使用 eval 函数时,我们需要非常小心,确保用户的输入是安全...

    javascript中eval解析JSON字符串.docx

    如果直接使用`eval(str)`而不加小括号,会导致语法错误。这是因为`eval()`期望接收到的是可以执行的JavaScript代码,而不是一个简单的对象字面量。例如: ```javascript var str = '{"name":"hanzichi","age":10}';...

    EVAL操作集合 包含Eval()的一些常用操作 常用函数

    EVAL操作是ASP.NET中的一种绑定机制,可以将数据绑定到控件上,以便在页面上显示数据。Eval操作可以计算字符串,并绑定字段等功能。 在使用Eval操作时,需要注意以下几点: 1. 使用Bind()方法可以绑定字段,例如:...

    javascript中eval函数用法分析.docx

    ### JavaScript中eval函数用法分析 #### 一、eval函数简介 `eval()`函数是JavaScript中的内置函数之一,用于解析并执行包含JavaScript代码的字符串。它只有一个参数,该参数可以是字符串或非字符串类型。 - **非...

    ide-eval-resetter-2.3.5.zip

    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()`函数接收一个参数,这个参数必须是一个字符串。在执行时,`eval()`会将这个字符串当作可执行的代码来处理。例如,在JavaScript中,如果你有一个变量`code`存储了`"alert('Hello, World!')"`这样的字符串,...

    在Javascript中Eval函数的使用?

    在这个例子中,`eval()`接收一个字符串`code`,然后将其中的JavaScript语句执行,就像它们是直接写在源代码中一样。这使得`eval()`成为实现动态编程和代码注入的一种手段。 然而,`eval()`也存在显著的安全隐患。当...

Global site tag (gtag.js) - Google Analytics