我无法理解的括号在下面的JavaScript语句:我无法理解这个JavaScript语句括号
({go_go: 'go'});
什么是()
这里是什么意思?
我知道()
在函数中表示这个函数是匿名的。就像下面的代码一样。这样对吗?
(function() {
alert('something');
})();
谢谢!
我无法理解的括号在下面的JavaScript语句:我无法理解这个JavaScript语句括号
({go_go: 'go'});
什么是()
这里是什么意思?
我知道()
在函数中表示这个函数是匿名的。就像下面的代码一样。这样对吗?
(function() {
alert('something');
})();
谢谢!
在该文字示例中,它们没有任何用途,但通常它们用于封闭表达式 —,以确保将parens的内容读作表达式而不是语句。
当人们使用eval
以JSON格式反序列化数据时,您会看到类似的情况。因此,举例来说,他们可能会在形式得到的字符串:
var s = '{"go_go": "go"}';
...并用它来反序列化:
var o = eval('(' + s + ')');
这是一个古老的变通一定的问题,但你'很多最好使用适当的JSON解析库,例如Crockford's github page上列出的三个中的任何一个。 (Crockford是JSON的发明者。)有一个用来检测各种格式不正确的JSON内容的正则表达式,然后使用eval
以及另外两个根本不使用eval
的正则表达式。 (在处理来自不可信源的JSON时,我绝不会使用eval
)。
我认为Why does JavaScript's eval need parentheses to eval JSON data?可以解答您的问题。
你不需要它们,如果你只是在你的代码中有一个普通的对象字面值。
在函数表达式中,外部()
不会使函数匿名(它已经是因为它没有名字)。但是,在定义它之后立即执行匿名函数,因为function(){}();
无效,所以它们是必需的。
一些人在周围有括号JSON对象的习惯...
var jsonObject = ({go_go: 'go'});
相同
var jsonObject = {go_go: 'go'};
他们这样做的原因,这是因为,如果您检索JSON对象通过AJAX调用,您通常需要使用括号来防止出现常见的解析错误。
下面的代码行往往会导致一个无效的标签错误:
var jsonObject = eval(stringOfJson);
这通常是解决如下:
var jsonObject = eval("(" + stringOfJson + ")");
最后,包裹在括号内的即时功能的做法应该看起来像这样...
(function() {
alert('something');
}());
并使用括号的唯一原因是,它使眼前的功能更明显(如www.jslint.com除其他recommened!)
谢谢您的回复!你的评论是有帮助的。我还检查了表达式语句的语法图。现在我已经得到了答案。 =) – weilou 2011-02-18 06:55:55