javascript中,(new Function("return " + str))() 是如何把字符串转为json的
javascript中,(new Function("return " + str))() 是如何把字符串转为json的
我们写在script标签内的,以及js文件内的,本质都是字符串.
但浏览器会使用js解释器解释它,使它变为你认知中的代码世界,包括函数,对象等等.
有时候,我们写代码时,无法确定运行时的逻辑,需要临时解释,比如以下场景.
比如后端传过来一个"1 + 1"
的字符串,你需要将这个字符串作为表达式进行运算,获得它的结果用于展示.我们可以手写一个解释器解释这个字符串.
假定我们确定后端返回的这个字符串一定是 [数字 + 数字]的结构,则可以用正则拆解,获得+号前后 的数字,做+运算.
当然,实际情况会非常复杂,为此,浏览器提供了eval
这个api,它可以解释js代码,将运行结果返回给你.这个接口实际很危险,因为你不知道后端会传什么代码给你,如果被劫持,篡改了代码,就会产生泄密风险.所以有些平台会把这个接口封掉,(比如小程序...当然它是为了防止热更新)
回到正题
new Function,JSON.parse等本质上都是解释器,可以把字符串转换为运行时的代码.
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
new Function
实际上是一种创建函数的语法,可以参考这篇文章 了解具体细节。这里参数中
"return " +str
作为函数体,也就是函数里面只有return语句,return的结果是str转换后的js对象