今天看了一段代码,有个地方搞不明白作者究竟是什么意图,请高手指教:
第二个条件中为什么要用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) { }
}
第二个条件中为什么要用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) { }
}
var obj = {};
var value="abc#$!xx'&*";
obj.value = value;
or
obj["value"] = value;
如果a是字符串,把a的内容当做变量(或对象)名,再把该名称变量的值(不一定是字符串)赋给b如:
a="c";
c="d";
eval('b=' + a);
alert(b);
会出现什么结果呢? c 还是 d ?LS说的也有道理,如果a的内容不是已有的变量(或对象)名就杯具了。
你代码中的a的值是不固定的,所以不能使用 b=a来代替
var b = null;
var c=null
var a="2+3";
eval('b=' + a);
c=a;
alert(c==b);
var b=null;
var a="{}";
try{
var c = eval("b=" + a);
}catch(e){}c = {}
宏观准确的理解是:EVAL(STR)将执行STR里的表达式或者语句,你可以认为这和函数很想像,函数也是返回一个返回值,或者执行函数体内的操作。函数也可以根据传参的实际内容不同,运算出不同结果,EVAL也是如此。当然,这只是便于理解,多作些练习就能体会相似和差别了。
在一些对JS加密的方法里,就是使用了EVAL去执行打一个函数,而那个函数的作用就是将一堆看似乱码的代码不愿为正常的代码。也就是说,EVAL可以用来执行整个一个JS程序(包括多个变量,多个函数,及函数间的调用等等,就象你所能见到的一般的JS文件里那样),这个是一般函数所无法做到的(除非这个函数还是再调用EVAL)。
在一些对JS加密的方法里,就是使用了EVAL去执行
打一个函数,而那个函数的作用就是将一堆看似乱码的代码还愿为正常的代码。也就是说,EVAL可以用来执行整个一个JS程序(包括多个变量,多个函数,及函数间的调用等等,就象你所能见到的一般的JS文件里那样),这个是一般函数所无法做到的(除非这个函数还是再调用EVAL)。有点晕了,打错字机率上升。if (typeof a== 'object') {//如果A是对象就直接赋值
b = a;
} else if (typeof a== 'string') {
try {
eval('b=' + a);//如果是字符串,那么就通过EVAL动态解析。把A解析成对象。加TRYcatch 是防止当输入的字符串变量不存在时出错做的准备。这么做事为了灵活性。但是EVAL确实会引出一些不安却因素。
} catch (e) { }
}东西是死的,人是活的。杜绝?这话你跟开发者说去