执行eval('({"ok":"true"})')返回了{ok: "true"},什么原理?

如下图是在Chrome中得到的:

https://img1.mukewang.com/5b912be400012f8902660068.jpg

问题:
首先,str代表的是一个json字符串,这点应该是没疑问的,然后我运行eval('({"ok":"true"})')就返回了{ok: "true"},这里面是怎么实现的?是去看别人写的项目的源码中看到的,不明所以,请赐教~


回首忆惘然
浏览 910回答 2
2回答

饮歌长啸

eval() -- 你就想象成写了一段代码给浏览器解析,性质是一样的如 let str = 'x={"ok":"true"}'; eval(str); 执行之后 会在当前作用域中创建一个x的变量 赋值为 {ok:'true'}你上面的例子 eval('(' + str + ')'); <==> 等价于直接在浏览器中写了一个 {ok:'true'}&nbsp;由于不是合格的表达式,eval中在两边加了括号

慕村9548890

eval函数接受字符串,然后把这个字符串当作js代码去运行,返回运行的结果。eval('({"ok":"true"})')相当于运行({"ok":"true"})返回对象{ok: "true"}。个人觉得需要注意的点是两边为什么要加括号?因为{}不仅可以用来声明对象,还表示块级作用域,如果两边不加括号,会把{}当成块级作用域解析,就会报语法错误;加上括号,会把{}当作对象声明处理,所以就会生成一个新的对象,不会报语法错误。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript