今天看了一段代码,有个地方搞不明白作者究竟是什么意图,请高手指教:
第二个条件中为什么要用eval('b='+a)?为什么不直接像第一个条件中那样直接赋值(b=a)?
var b = null;
if (typeof a== 'object') {
     b = a;
} else if (typeof a== 'string') {
     try {
  eval('b=' + a);
     } catch (e) { }
}

解决方案 »

  1.   

    没明白这例子究竟想说明啥问题,怎么看起来都是要把a赋值给b。楼主,你甭管那么多,javascript是弱类型的,你直接 b = a; 怎么都不会出错,一旦使用了eval反而有出错的可能,所以他加了个trycatch。在js里面可以说要杜绝使用eval,给对象属性赋值之类的,如果知道属性名就用.号,不知道属性名就使用[]来代替就行了,比如:
    var obj = {};
    var value="abc#$!xx'&*";
    obj.value = value;
    or
    obj["value"] = value;
      

  2.   

    俺的理解:
    如果a是字符串,把a的内容当做变量(或对象)名,再把该名称变量的值(不一定是字符串)赋给b如:
    a="c";
    c="d";
    eval('b=' + a);
    alert(b);
    会出现什么结果呢? c 还是 d ?LS说的也有道理,如果a的内容不是已有的变量(或对象)名就杯具了。
      

  3.   

    eval是用来把一段字符串当作JS代码来执行。
    你代码中的a的值是不固定的,所以不能使用 b=a来代替
      

  4.   

    eval是用来把一段字符串当作JS代码来执行。
      

  5.   


    var b = null;
    var c=null
    var a="2+3";
    eval('b=' + a);
    c=a;
    alert(c==b);
      

  6.   


    var b=null;
    var a="{}";
    try{
    var c = eval("b=" + a);
    }catch(e){}c = {}
      

  7.   

    那a不是string类型的么,所以才这样
      

  8.   

    这就是动态执行语句。根据变量的内容,改变实际执行的代码内容。赋值这个说法非常片面,只是其中一个表现而已。
    宏观准确的理解是:EVAL(STR)将执行STR里的表达式或者语句,你可以认为这和函数很想像,函数也是返回一个返回值,或者执行函数体内的操作。函数也可以根据传参的实际内容不同,运算出不同结果,EVAL也是如此。当然,这只是便于理解,多作些练习就能体会相似和差别了。
      

  9.   

    一个明显的实例可以表明区别,虽然我并不想在这里真正写出来,但只要提一下你就有所了解了:
    在一些对JS加密的方法里,就是使用了EVAL去执行打一个函数,而那个函数的作用就是将一堆看似乱码的代码不愿为正常的代码。也就是说,EVAL可以用来执行整个一个JS程序(包括多个变量,多个函数,及函数间的调用等等,就象你所能见到的一般的JS文件里那样),这个是一般函数所无法做到的(除非这个函数还是再调用EVAL)。
      

  10.   

    一个明显的实例可以表明区别,虽然我并不想在这里真正写出来,但只要提一下你就有所了解了:
    在一些对JS加密的方法里,就是使用了EVAL去执行一个函数,而那个函数的作用就是将一堆看似乱码的代码愿为正常的代码。也就是说,EVAL可以用来执行整个一个JS程序(包括多个变量,多个函数,及函数间的调用等等,就象你所能见到的一般的JS文件里那样),这个是一般函数所无法做到的(除非这个函数还是再调用EVAL)。有点晕了,打错字机率上升。
      

  11.   

    var b = null;//声明对象
    if (typeof a== 'object') {//如果A是对象就直接赋值
      b = a;
    } else if (typeof a== 'string') {
      try {
    eval('b=' + a);//如果是字符串,那么就通过EVAL动态解析。把A解析成对象。加TRYcatch 是防止当输入的字符串变量不存在时出错做的准备。这么做事为了灵活性。但是EVAL确实会引出一些不安却因素。
      } catch (e) { }
    }东西是死的,人是活的。杜绝?这话你跟开发者说去