关于javascript中的for in 和 for的用法

今天上QQ, 一哥们就来问我一个问题。

看了一眼,差不多知道其中的错误原因了,在与forfor 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)


其他内容不变,就是for 改为 for in 而已。

大家只要记住,在javascript中,循环数组用for循环,循环对象尽量用for in循环就行啦。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值