求教:javascript中,(new Function("return " + str))() 是如何把字符串转为json的

高健
  • 70

javascript中,(new Function("return " + str))() 是如何把字符串转为json的

回复
阅读 797
3 个回答

new Function实际上是一种创建函数的语法,可以参考这篇文章 了解具体细节。

这里参数中"return " +str作为函数体,也就是函数里面只有return语句,return的结果是str转换后的js对象

image.png

所以呢,你是怎么跑成功的?

我们写在script标签内的,以及js文件内的,本质都是字符串.
但浏览器会使用js解释器解释它,使它变为你认知中的代码世界,包括函数,对象等等.

有时候,我们写代码时,无法确定运行时的逻辑,需要临时解释,比如以下场景.

比如后端传过来一个"1 + 1"的字符串,你需要将这个字符串作为表达式进行运算,获得它的结果用于展示.我们可以手写一个解释器解释这个字符串.
假定我们确定后端返回的这个字符串一定是 [数字 + 数字]的结构,则可以用正则拆解,获得+号前后 的数字,做+运算.

当然,实际情况会非常复杂,为此,浏览器提供了eval这个api,它可以解释js代码,将运行结果返回给你.这个接口实际很危险,因为你不知道后端会传什么代码给你,如果被劫持,篡改了代码,就会产生泄密风险.所以有些平台会把这个接口封掉,(比如小程序...当然它是为了防止热更新)

回到正题
new Function,JSON.parse等本质上都是解释器,可以把字符串转换为运行时的代码.

你知道吗?

宣传栏