我无法理解下面JavaScript语句中的括号:
({go_go: 'go'});这里的()是什么意思?
我知道函数中的()意味着这个函数是匿名的。就像下面的代码一样。是对的吗?
(function () {
alert('something');
})();谢谢!
发布于 2011-02-16 17:03:23
在文字示例中,它们没有任何用途,但通常它们用于封闭表达式-具体地说,用于确保将括号的内容读取为表达式,而不是语句。
当人们使用eval反序列化JSON格式的数据时,您会看到类似的事情。因此,例如,他们可能会收到以下形式的字符串:
var s = '{"go_go": "go"}';...and使用以下代码对其进行反序列化:
var o = eval('(' + s + ')');这是解决某些问题的旧方法,但是最好使用合适的JSON解析库,比如Crockford's github page上列出的三个解析库中的任何一个。(Crockford是JSON的发明者。)其中一个是执行一些正则表达式来检测各种格式错误的JSON内容,然后使用eval,另外两个根本不使用eval。(在处理来自不可信来源的eval时,我永远不会使用JSON。)
发布于 2011-02-16 17:05:34
我想Why does JavaScript's eval need parentheses to eval JSON data?回答了你的问题。
但是,如果您的代码中只有一个纯对象文字,则不需要它们。
在您的函数表达式中,外部()不会使函数匿名(它已经是匿名的,因为它没有名称)。但是,要在定义匿名函数后立即执行它,它们是必需的,因为function(){}();无效。
发布于 2011-02-16 17:08:32
有些人习惯于用括号将JSON对象括起来...
var jsonObject = ({go_go: 'go'});等同于
var jsonObject = {go_go: 'go'};他们这样做的原因是,如果您要通过AJAX调用检索JSON对象,则通常需要使用括号来防止常见的解析错误。
下面这行代码通常会导致无效标签错误:
var jsonObject = eval(stringOfJson);通常解决方法如下:
var jsonObject = eval( "(" + stringOfJson + ")" );最后,将立即函数放在括号中的做法应该如下所示……
(function () {
alert('something');
}());您使用括号的唯一原因是它使即时函数更明显(正如www.jslint.com等人所推荐的那样!)
https://stackoverflow.com/questions/5014418
复制相似问题