由eval('('+json+')')想到的
在javascript中,小括号和大括号也有他的特殊用法,比如小括号他可以用来执行一个函数,
可以作为一个分隔符。而大括号可以是一个语句块,也可以作为一个对象字面量,来构造
一个对象。大括号在作为一个语句块执行时和作为表达式一部分执行时时完全不一样的,当
作为表达式执行时是创建了一个对象,而作为一个语句执行时,只是单纯的执行其中的语句,
这在eval函数中表现的尤为明显。eval在执行时会把字符串参数当做语句执行,当不是字符串
时直接返回该参数。那么eval({a:2})返回的就是一个对象,也就是{a:2},但是当eval('{a:2}')
时,他会把字符串中的内容当做语句执行,也就是把{a:2}当做语句执行,a:2是没有意义
的,但是当eval('({a:2})')时,会执行({a:2}),这时{a:2}被当做了表达式的一部分,就是表示
一个对象,这也是为什么eval在执行json的时候要写成eval('('+json+')')的原因,因为json
是一个字符串,那么这样就相当于执行(json),其中的json已经成为了一个对象。