首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我无法理解此JavaScript语句中的括号

问我无法理解此JavaScript语句中的括号
EN

Stack Overflow用户
提问于 2011-02-16 17:01:32
回答 3查看 364关注 0票数 1

我无法理解下面JavaScript语句中的括号:

代码语言:javascript
复制
({go_go: 'go'});

这里的()是什么意思?

我知道函数中的()意味着这个函数是匿名的。就像下面的代码一样。是对的吗?

代码语言:javascript
复制
(function () {
    alert('something');
})();

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-16 17:03:23

在文字示例中,它们没有任何用途,但通常它们用于封闭表达式-具体地说,用于确保将括号的内容读取为表达式,而不是语句。

当人们使用eval反序列化JSON格式的数据时,您会看到类似的事情。因此,例如,他们可能会收到以下形式的字符串:

代码语言:javascript
复制
var s = '{"go_go": "go"}';

...and使用以下代码对其进行反序列化:

代码语言:javascript
复制
var o = eval('(' + s + ')');

这是解决某些问题的旧方法,但是最好使用合适的JSON解析库,比如Crockford's github page上列出的三个解析库中的任何一个。(Crockford是JSON的发明者。)其中一个是执行一些正则表达式来检测各种格式错误的JSON内容,然后使用eval,另外两个根本不使用eval。(在处理来自不可信来源的eval时,我永远不会使用JSON。)

票数 2
EN

Stack Overflow用户

发布于 2011-02-16 17:05:34

我想Why does JavaScript's eval need parentheses to eval JSON data?回答了你的问题。

但是,如果您的代码中只有一个纯对象文字,则不需要它们。

在您的函数表达式中,外部()不会使函数匿名(它已经是匿名的,因为它没有名称)。但是,要在定义匿名函数后立即执行它,它们是必需的,因为function(){}();无效。

票数 1
EN

Stack Overflow用户

发布于 2011-02-16 17:08:32

有些人习惯于用括号将JSON对象括起来...

代码语言:javascript
复制
var jsonObject = ({go_go: 'go'});

等同于

代码语言:javascript
复制
var jsonObject = {go_go: 'go'};

他们这样做的原因是,如果您要通过AJAX调用检索JSON对象,则通常需要使用括号来防止常见的解析错误。

下面这行代码通常会导致无效标签错误:

代码语言:javascript
复制
var jsonObject =  eval(stringOfJson);

通常解决方法如下:

代码语言:javascript
复制
var jsonObject =  eval( "(" + stringOfJson + ")" );

最后,将立即函数放在括号中的做法应该如下所示……

代码语言:javascript
复制
(function () {
    alert('something');
}());

您使用括号的唯一原因是它使即时函数更明显(正如www.jslint.com等人所推荐的那样!)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5014418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档