<script type="text/javascript">
function test(path){
var arr= path.split(".");
var ns='';
for(var i=0;i<arr.length;i++){
if(i>0){ ns+='.';}
ns+= arr[i];
/* ns = new Object();
*/
eval(" {"+ns+"=new Object();}");
}
}
test("AAA.bbb");
alert(AAA.bbb); //为啥只能用eval这里才能正常显示对象?
</script>
假如这样写 结果就是AAA未定义
<script type="text/javascript">
function test(path){
var arr= path.split(".");
var ns='';
for(var i=0;i<arr.length;i++){
if(i>0){ ns+='.';}
ns+= arr[i];
ns = new Object();
/* eval(" {"+ns+"=new Object();}"); */
}
}
test("AAA.bbb");
alert(AAA.bbb); //为啥只能用eval这里才能正常显示对象?
</script>
用eval的话 最后就可以把传递的参数最终处理为对象,
有无不用eval 把传递的参数处理为对象?谢谢了
楼上已说的很清楚了。另吐槽: 你把 path 拆开又拼起来,目的是什么?
我可能要说句不太客气的话:题主你有点「思而不学」了。先系统认真地看一遍 JavaScript 的入门书籍,然后有疑问再问,会好一些。
我觉得你可能连「变量」这个概念都没理解。第二个例子里 ns
是一个局部变量。本来 ns
指向一个字符串,ns = new Object()
后就指向新创建的对象。
//第一个循环执行的代码如下
var ns="";
ns="AAA";
//eval("{AAA=new Object();}");相当于执行{AAA=new Object()}; 也就是执行 AAA=new Object();
AAA=new Object();
ns="AAA.bbb";
//eval("{AAA.bbb=new Object();}");相当于执行{AAA.bbb=new Object()}; 也就是执行 AAA.bbb=new //Object();
AAA.bbb=new Object();
alert(AAA.bbb);
//你说是什么内容了?
//第二个循环执行如下
var ns="";
ns="AAA";
ns=new Object();
ns="AAA.bbb";
ns=new Object();
alert(AAA.bbb);
//你说会出来什么内容
//搞技术的要务实 多看书 多动脑 。