听同事说了一个需求。他有一个数据对象obj,接口会给他返回一个索引key,这个key长度不固定,根据这个key去修改obj对应的值。安全
举个例子:函数
let obj={"level1":{"level2":{"level3":100}},"level1B":{leve2:"999"}}; let key='level1.level2';
let value='wh';
如今我想修改索引key 对应的值 {"level3":100}为变量value的值 'wh'.学习
方法一:使用eval spa
eval函数 我看了不少书 都让别用这个函数。可是它真的很强大。code
eval(`obj.${key}=value`);
鉴于eval有一些做用域问题,还有一些安全性问题 据说最好别用(这个我其实没怎么用过,本着学习的态度 琢磨了一下方法二)对象
方法二:使用new Function() 它也能够在函数里将字符串看成js表达式执行。blog
new Function('obj','key','value',`obj.${key}=value`)(obj,key,value);
注意点:递归
用模板字符串的时候 只有key须要加${} obj和value虽然也是变量 可是看成普通值处理就行了。(缘由的话 我认为因key表明的是动态的属性,若是不对欢迎指正)索引
最后: 其实这个也能够写个递归函数来解决。接口