eval解析ajax传回的json字符串为什么要用括号

javascript没有块级作用域,但可以用{}来分割代码,

function say() { {
var a = 1;
}{
//anotherCodeBlock
}
alert(a);
}
say(); // 仍然输出1

当用eval解析时,{}会被理解为一个代码块的开始,不会理解成为一个对象字面量。 

加()是为了迫使eval函数在评估JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,而不是作为语句(statement)来执行。

 

JSON格式的名字部分为什么要加引号?
因为eval函数会将{foo:”bar”}解释成合法的JavaScript语句,而非表达式。
但是人们往往想要的是让eval将这段代码解释成一个对象。所以JSON格式会强制你去在名字的外侧加上引号再结合圆括号,这样eval就不会错误的将JSON解释成代码块。
举例说明:
alert(eval('{foo:"bar"}')); // return "bar"
alert(eval('({"foo": "bar"})')); // return JSON object

alert(eval("{}");  // return undefined
alert(eval("({})");// return object[Object]

 

posted on 2014-10-23 13:23  bigdesign  阅读(376)  评论(0编辑  收藏  举报