obj    =   eval( pref   +   arr[1].split('.')[1]); 谁能告诉我这句话输出的结果是什么? 

解决方案 »

  1.   

    要看 pref的值和 arr[1].split('.')[1]的值是什么
    可能是变量的值,或语句的表达式值。
      

  2.   

    eval("obj    =  "+ pref  +  arr[1].split('.')[1]); try this
      

  3.   

    pref以及 rr[1].split('.')[1] 指的是什么?
      

  4.   

    这样的话
    alert( eval("pref+arr[1].split('.')[1]")); 
    就不会有错了
    alert( eval(pref+arr[1].split('.')[1])); 
    这样就出错了
    因为pref+arr[1].split('.')[1]得到的是一个常量,如果你让它变成变量,就会出现没有没有定义如果你用我第一种方法得到的结果和直接pref+arr[1].split('.')[1]是一样的
      

  5.   

    pref以及 rr[1].split('.')[1] 的值到底是什么?
      

  6.   

    举个例子你看:
    <script>
    var pref="aa";
    var arr=["0.1","a.2"];
    alert( eval(pref+arr[1].split('.')[1])); 
    </script>和
    <script>
    var pref="aa";
    var arr=["0.1","a.2"];
    alert( eval("pref+arr[1].split('.')[1])"); 
    </script>第二个是正确的,其他的都是错误的,第一个提示aa2没有定义
      

  7.   

    其实pref  +  arr[1].split('.')[1]就等于“60c43dc4-52c8-49bd-918a-05c403b167a7(下划线)60c43dc4-52c8-49bd-918a-05c403b167a7”
      

  8.   


    obj    =  eval('0,'+ pref  +  arr[1].split('.')[1]); 
    参见:JSLab ScopeChainAndClosure 部分
    /*
       eval不能直接得到一个直接量的对象
       因為eval将{}当成了复合语句标识
    */alert(eval('{name:"MyName"}'));//MyName/*
       复合语句是用逗号运算符将几个语句联合起来,用花括号括起来,形成一个语句块(statement block)。
       复合语句允许使用标签,但只允许出现一个,并且出现在整段语句的最开始位置
    */name:{"MyName",alert('2'),alert('3')}/*
       我们要做的是改变花括号{}在eval中的意义,使它成为一个表达式或值
    *///通过表达式运算符(),将{name:"MyName"}返回为一个值;
    alert(eval('({name:"MyName"})'));//我们也构造了一个复合语句,使得{name:"MyName"}成为这个复合语句里的一个表达式;
    alert(eval('{0,{name:"MyName"}}'));//可以进一步简化为连续表达式;
    alert(eval('0,{name:"MyName"}'));
      

  9.   

    对象命名规范中起始字符不能是数字的...
    改成
    obj= eval('document.getElementById("'+pref  +  arr[1].split('.')[1]+'")');   
    试试 
      

  10.   

    真是难呀,没法编译了,突然所有的东西都不见了,除了.SNK文件还在