js中有一個函數eval可以一段文本改為js代碼,本來使用eval也可以達到目的,但自己看了不少資料都不推薦使用eval函數,於是自己就在思考有沒有不使用eval的方法?
其實需求很簡單,就是把一個js對象變成了文本,現在又需要把這段文本變成js對象。
例如一段文本如下:
var j2="[{value:'xuanzhong',Selectd:{ShowIds:['div_9144','div_9147'],HideIds:['div_9156','div_9162'],EnableIds:['div_9156','div_9162'],UnEnableIds:['div_9156','div_9162']},UnSelectd:{ShowIds:[],HideIds:[],EnableIds:[],UnEnableIds:[]}}]";
如何把它變成一個js對象
-
var obj={};
-
obj.Value= "xuanzhong";
-
obj.Selectd={};
-
obj.Selectd.ShowIds=[ 'div_9144', 'div_9147';
-
obj.Selectd.HideIds=[ 'div_9156', 'div_9162'];
-
obj.Selectd.EnableIds=[ 'div_9156', 'div_9162'];
-
obj.Selectd.UnEnableIds=[ 'div_9156', 'div_9162'];
-
obj.UnSelectd={};
-
obj.UnSelectd.ShowIds=[];
-
obj.UnSelectd.HideIds=[];
-
obj.UnSelectd.EnableIds=[];
-
obj.UnSelectd.UnEnableIds=[];
使用eval函數很容易辦到
例如:
var obj=eval(j2);
但又沒有其他方法呢?
想了很久也沒有找到方法,最終查看jquery-easyui文檔受到了啟發,看看人家是如何處理的。
想不到如此簡單
var obj =(new Function("return "+""+j2+""))();
其實和eval區別似乎也不大,但jquery-easyui使用了這種方式,必然有一定的道理。其實我想最好的方法,其實是把js對象轉化為JSON文本,解析時再把JSON文本轉化為js對象應該更合理。
看了上面的方法,你是不是又Get到了新技能?
出處:https://blog.csdn.net/xuexiaodong009/article/details/39395699