js 將字符串看成js表達式執行方法

聽同事說了一個需求。他有一個數據對象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表明的是動態的屬性,若是不對歡迎指正)索引

 

最後: 其實這個也能夠寫個遞歸函數來解決。接口

相關文章
相關標籤/搜索