执行 json 中的 “函数”
Posted auserroot
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了执行 json 中的 “函数”相关的知识,希望对你有一定的参考价值。
JSON
MDN中关于JSON方法 stringify 和 parse 的转换解析类型有明确的说明 :
undefined、任意的函数以及 symbol 值,在序列化过程中会被忽略
(出现在非数组对象的属性值中时)或者被转换成 null(出现在数组中时)。
函数、undefined 被单独转换时,会返回 undefined,
如JSON.stringify(function()) or JSON.stringify(undefined).
这条说明 一个内部存在 函数的 Object 通过 JSON.stringify转换成String 后会忽略 内部函数
那么要在JSON中保存函数该怎么操作呢?
答案也很简单 直接将 函数 以 String 类型 在JSON中保存即可
那么保存后的String 类型的函数如何取用呢?
取用方式如下:
//示例 json
let json =
"aa":"(a,b)=>const c = a+b ; console.log(c)"//函数体内用 ;隔开语句
//封装方法重新构造函数
const _func = (fun) =>
//函数简单判断
if(!fun.includes('(')&&!fun.includes(')')&&!fun.includes('=>')&&!fun.includes('')&&!fun.includes('')||!fun.includes('function'))
return
//截取参数
//方法一: split
let arg = fun.split('(')[1].split(')')[0].split(',')//此时拿到的 arguments 是一个数组
//方法二:slice + indexOf + split
let arg = fun.slice(fun.indexOf('(')+1,fun.indexOf(')')).split(',')
// console.log(arg)
//函数体截取
//方法一:split
let f = fun.split('')[1].split('')[0] //函数体
//方法二:slice + indexOf
let f = fun.slice(fun.indexOf('')+1,fun.indexOf(''))
// console.log(f)
//上述方法二选一即可
return new Function(...arg,f) //返回一个组装好的新函数
console.log(json.aa) //(a,b)=>const c = a+b ; console.log(c)
//调用方法
_func(json.aa)(1,2) //3
以上是关于执行 json 中的 “函数”的主要内容,如果未能解决你的问题,请参考以下文章