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 

            eval函數 我看了很多書 都讓別用這個函數。但是它真的很強大。

eval(`obj.${key}=value`);

           鑒於eval有一些作用域問題,還有一些安全性問題  聽說最好別用(這個我其實沒怎么用過,本着學習的態度 琢磨了一下方法二)

方法二:使用new Function() 它也可以在函數里將字符串當作js表達式執行。

new Function('obj','key','value',`obj.${key}=value`)(obj,key,value);

 

注意點:

        用模板字符串的時候 只有key需要加${} obj和value雖然也是變量 但是當作普通值處理就好了。(原因的話 我認為因key代表的是動態的屬性,如果不對歡迎指正)

 

最后: 其實這個也可以寫個遞歸函數來解決。

 

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM