如题,什么时候该加括号什么时候不该加;
今天在改项目的时候,因为是几乎相同功能的模块所以,统一采用了加括号的写法,但是发现,有一个数据图怎么都出不来 报错点击显示([object Object]),外面多了一组小括号,去掉括号,可以正常运行
如题,什么时候该加括号什么时候不该加;
今天在改项目的时候,因为是几乎相同功能的模块所以,统一采用了加括号的写法,但是发现,有一个数据图怎么都出不来 报错点击显示([object Object]),外面多了一组小括号,去掉括号,可以正常运行
eval()在解析字符串参数时,会把参数以执行语句的方式返回,如果你的字符串 解析出来是对象的话(比如说Json字符串) 这时eval在解析的时候会把 对象的括号当成执行语句块的 开始和结束 所以此时需要先多加括号.
如果你的字符串本身就是一段js的执行语句 就不用加括号了 eval会直接解析执行语句
当data是这样的字符串时"{....}",但是你这个{}表示的是一个对象,或者json数据,就要拿()包起来data来,因为当解释器遇到{},它会认为这个是一个代码块,会执行它,所以解释里面的键值对的时候就会报错,如果用()抱起来,就将这个作为一个表达式了,也就可以作为一个对象正常解析了
10 回答11.7k 阅读
2 回答3.2k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
3 回答865 阅读✓ 已解决
3 回答1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
如果
data
是字符串,使用eval("("+data+")")
可以将其转换为json
对象,和JSON.parse
的功能一样。如果
data
是json
对象,使用eval("("+data+")")
会报错,正如你描述的错误。eval
一个json
对象,没有什么作用,这个时候不需要使用eval
方法,直接用data
即可。所以,如果你那边能确定后台返回的是字符串,就使用
eval("("+data+")")
(eval
会带来很多问题,不建议使用,如果想实现转化用JSON.parse
更好),如果后台返回的是json
对象,什么操作都不需要,直接使用data
即可。如果你是用的jquery
, 将type
(一般为这个配置属性)设为json
,或者利用$.getJSON()
方法获得服务器返回,那么就不需要eval()
方法了,因为这时候得到的结果已经是json
对象了,只需直接调用该对象即可另外多说一点:
为什么
eval
要添加括号呢?原因:
eval
本身的问题。 由于json是以{}
的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。加上圆括号的目的是迫使
eval
函数在处理JavaScript
代码的时候强制将括号内的表达式(expression)
转化为对象,而不是作为语句(statement)
来执行。举一个例子,例如对象字面量{}
,如若不加外层的括号,那么eval
会将大括号识别为JavaScript
代码块的开始和结束标记,那么{}
将会被认为是执行了一句空语句。