alert( eval(a) );       // 这会是多少? 
567alert( eval(b) );       // 再来一个呢?
abceval(a),这句只是动态执行 eval(abc = "567"),跟a变量没有关系,所以这时a还是"abc"这个串,而eval(b),相当于eval(b = new String(a));由于这时a还是"abc",所以这句的运行结果就是"abc". 如果想要执行eval(a)时a的值也跟着变化,则这样 alert( a = eval(a) ); 即可

解决方案 »

  1.   

    昨晚睡着前我想到了一些,感觉不是你说这样的。
    问题的根本应该在于JavaScript传参的时候,对于引用类型,只是复制了一份引用,并不改变实参的特征性状。其实我是希望两者都为"567"的,调试的时候可以看到,a 就是字符串"abc",监视窗口并不显示其各种各样的从原型得到的成员,而b跟a的不同就是显示了从原型得到的各种成员。
    姑且这么理解:
    a为值类型字符串,其值为"abc"   //具有值类型变量的特征
    b为引用型字符串,其值为"abc"   //具有引用型变量的特征
    eval在处理的时候,
    对于a这种类型是取其值,即相当于eval( "abc" ),//取变量abc
    对于b这种类型是取其引用,即相当于b;//取变量b如此说来,则Number,Boolean也应有类通之处,事实上,也确有。
    还记得“TT是什么”那个题吗?new Boolean(false)跟这里的b就有相似之处。====
    睡觉的时候思维才清晰,容易想通。
      

  2.   

    <script type="text/javascript">
    var a = "abc";
    var b = new String(a);
    //b = String(b); //如果加上这句话的话就得到你想要的效果了
    var abc = "567";
    alert( eval(a) );       // 而这里的eval执行了字符串
    alert( eval(b) );  //这里的eval只是执行了对象,所以取对象里的内容。
    </script>
      

  3.   

    //就是这个结果,这就是eval的基本用法呀alert(eval(a)) = alert(eval("abc")) = alert(abc)  
    alert(eval(b))  = alert(eval("a")) =  alert(a)alert(eval("abc")) 
    alert(eval("a"))那个和这个不一样
      

  4.   

    eval我的理解就是把字符串变成一个变量或objeval("document.getELementB"+"yId('aa').value")
    上面是2个字符串相连,结果等于document.getELementById('aa').value后的结果
    var a = "abc";
    eval(a)就相当于eval("abc"),
    eval("abc")后的结果是变量abc,
    而变量abc的值是567
    最后结果相当于alert(abc) 
      

  5.   

    和new有什么关系var b = "a";一样的结果呀
    alert( eval(eval(b)) ) //看看这个
      

  6.   

    LZ不明白的就是new啊
    因为
    var b = new String(a);
    var b = "a";
    eval前可是不一样的
    只不过是eval后的结果是一样的。
    eval后第一个还是对象只是把它的值拿出来了而已。
    但是第二个则成了变量a把a的值拿出来了。
    他们虽然结果是一样的。
    但是操作的方式是不一样的。 
    另外。。
    我想问个问题呢
    谁能帮我解答下啊。。
    msn:[email protected]
      

  7.   

    eval后第一个还是对象只是把它的值拿出来了而已。
    但是第二个则成了变量abc把abc的值拿出来了。
    打错了。寒
    不好意思。
      

  8.   

    var a = "abc";
    var b = new String(a);
    var abc = "567";
    alert( eval(b) ); // 这会是多少?alert( eval(b) )的结果是abc,var b = new String(a);
    var b = "a";结果是一样的
      

  9.   

    alert( eval(a) );   
    这个是567,因为a为字符串abc,eval之后就相当于eval("abc"),就改变为abc这个变量了b=new String(a);这个就好像.net讲 string实际也是一个引用类型一样,虽然value也是abc,但是实际新产生了一个对象,指向了不同的地址,所以alert( eval(b) )这个仍然是abc
      

  10.   

    昨晚就想回复这个贴了, 不过不知干嘛, 我以到晚上就不能回复的, 真是奇怪,看就可以, 白到又可以,想不通, 难道CSDN晚上不给回复你