今天上QQ, 一哥们就来问我一个问题。
看了一眼,差不多知道其中的错误原因了,在与for与for in 的误用。
接下来,我把他的问题发给大家看,顺便大家来猜猜结果。
<script>
function max()
{
var a=1;
for(var i=0;i<arguments.length;i++)
if(arguments[i]>a)max=arguments[i];
return max;
}
var b=max(2,58,1,5,100,6)
alert(b)
</script>
大家一看,可能就知道这个函数的功能是用来获取最大值的,你们可能就疑惑了,干嘛不用sort()...-.- 好吧,咱们就事论事就是了..
估计有的童鞋会说弹出来的值是100吧?
好吧,其实他弹出来的是6....
为什么呢? 这不科学啊!!!!
其实,这就是没用好for的原因。
通常来讲, 一般循环数组用的是for,而循环对象用的是for in.
大家都知道,arguments是一个类数组对象,说白了,也是个对象.
然后呢??
比如说, arguments[1] 代表什么东西?
第一, 他代表的可能代表该对象中第二个属性的值对吧?
第二, 他也可以代表属性为1的值对吧?
所以问题就来了。这个东西应用到上面的例子中,就会出现bug。
怎么解决? 很简单, 把for 改为for in就行啦。 接下来就是我改过之后的代码:
function max()
{
var a=1;
for(var i in arguments){
if(arguments[i]>a){
a = arguments[i];
}
}
return a;
}
var b=max(2,58,1,5,100,6)
alert(b)
大家只要记住,在javascript中,循环数组用for循环,循环对象尽量用for in循环就行啦。