当前位置: 首页 > 面试题库 >

为什么JavaScript的eval需要括号来评估JSON数据?

杨慎之
2023-03-14
问题内容

我已经知道(困难的方式)需要在JSON数据周围添加括号,如下所示:

stuff = eval('(' + data_from_the_wire + ')');
// where data_from_the_wire was, for example {"text": "hello"}

(至少在Firefox 3中)。

这是什么原因呢?我讨厌写代码而又不了解幕后花絮。


问题答案:

放在括号内data_from_the_wire实际上等效于

stuff = eval('return ' + data_from_the_wire + ';');

如果要在没有括号的情况下进行评估,则将对代码进行评估,并且如果其中确实有任何命名函数,则将对其进行定义,但不会返回。

举例来说,可以像创建函数一样调用函数:

(function() { alert('whoot'); })()

将调用刚刚定义的函数。但是,以下内容不起作用:

function() { alert('whoot'); }()

因此,我们看到括号有效地将代码转换为返回的表达式,而不仅仅是运行代码。



 类似资料:
  • 本文向大家介绍为什么eval要添加括号呢?相关面试题,主要包含被问及为什么eval要添加括号呢?时的应答技巧和注意事项,需要的朋友参考一下 没太理解题意,方法的调用是要加括号的啊…… 如果题目问的是为什么会有 这种调用形式的话,那是因为js规定在间接调用(无调用者上下文)时,其编译的代码会默认执行在顶层作用域。 例: 所以永远只会返回全局对象(该表达式可以作为的polyfill,并且无法被污染)

  • 问题内容: 您能否告诉我这种特定语法结构的原因 解析json文本时。克罗克福德说:“ 文本必须用括号括起来,以避免绊倒JavaScript语法 。” 在这里。那是什么意思? 我们可以避免吗? 问题答案: Crockford所指的语法含糊之处在于,如果在 表达式 上下文中未找到一个开放的花括号,则该花括号将被识别为一个块,而不是一个对象文字的开头。 例如: 会给您一个语法错误,因为它将被解释为一个块

  • 问题内容: 示例1中的问题是“ this”引用了全局名称而不是myName对象。 我了解在将this的值设置为特定对象时使用bind()的方法,因此它可以解决示例1中的问题,但是为什么首先会出现此问题?这仅仅是创建Javascript的方式吗? 我还想知道为什么示例3解决了这个问题,以及示例2和示例3之间的区别。 问题答案: 为什么需要JavaScript bind()? 值是决定 如何 一个功能

  • 是否由于编译器假定它将在此实例中返回一个int值,所以即使抛出了异常,也不能返回异常?

  • 问题内容: 对于我确定的人来说,这是一个简单的答案。有人可以解释为什么此表达式的值为真吗? 问题答案: 因为您使用的是==(相似性)运算符,而PHP将字符串强制为int。 要解决此问题,请使用===(等于)运算符,该运算符不仅会检查值是否相同,还会检查数据类型是否相同,因此“ 123”字符串和123 int不会被视为相等。

  • eval 函数会在当前作用域中执行一段 JavaScript 代码字符串。 var foo = 1; function test() { var foo = 2; eval('foo = 3'); return foo; } test(); // 3 foo; // 1 但是 eval 只在被直接调用并且调用函数就是 eval 本身时,才在当前作用域中执行。 var fo