求助,for..in使用出错,在使用中有什么要注意的?

XNightSky 2010-04-06 02:02:13

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<script language="javascript" type="text/javascript">
function checkSex(){
var sex = document.getElementsByName("rdoSex");
for(var i in sex){alert(i);
if(sex[i].checked == true){
return true;
}
}
/*for(var i=0;i<sex.length;i++){alert(sex[i].checked)
if(sex[i].checked == true){
return true;
}
}*/
alert("请选择性别");
return false;
}
</script>
</head>

<body>
<form action="" method="post" onsubmit="return checkSex()">
<input name="rdoSex" type="radio" value="" />
<input name="rdoSex" type="radio" value="" /><br/>
<input name="" type="submit" />
</form>
</body>
</html>

这段代码使用for则完全正确,使用for...in则出错,alert()出来的结果也很奇怪,这是为什么?for..in在使用中有什么要注意的?求助大家!
...全文
267 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
XNightSky 2010-04-06
  • 打赏
  • 举报
回复
mytigo大大的回答非常清晰懂了!
passself 2010-04-06
  • 打赏
  • 举报
回复
for in 就和java中的迭代差不多
XNightSky 2010-04-06
  • 打赏
  • 举报
回复
分不够了。。加满结贴。。
mytigo 2010-04-06
  • 打赏
  • 举报
回复
1、首先

for...in 声明用于对数组或者对象的属性进行循环操作。

for...in 循环中的代码每执行一次,就会对数组的元素或者对象的属性进行一次操作。

语法:
for (变量 in 对象)
{
在此执行代码
}“变量”用来指定变量,指定的变量可以是数组元素,也可以是对象的属性。


2、其次

getElementsByName返回的并不是Array,而是一个拥有length属性的集合对象,所以for...in 的时候对将他的这个属性也迭代进去了。


3、判断一个对象是否是Array的方法

function isArray(o) {   
return Object.prototype.toString.call(o) === '[object Array]';
}

XNightSky 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ilwm1984 的回复:]

简简单单一句话:
for...in....是用于循环某个对象的属性。
for() 是用于集合(数组)
document.getElementsByName,返回的是Dom数组。而不是一个对象.
[/Quote]
obj.push(sex[i])是把Dom数组加入一个Array对象,用for..in来循环该对象的。。
document.getElementsByName,返回的是Dom数组。而不是一个对象,它会循环遍历Dom数组里每个对象的属性!
懂了!谢谢3位大大的解答!过段时间结贴!
jeremyxuzz 2010-04-06
  • 打赏
  • 举报
回复
简简单单一句话:
for...in....是用于循环某个对象的属性。
for() 是用于集合(数组)
document.getElementsByName,返回的是Dom数组。而不是一个对象.
XNightSky 2010-04-06
  • 打赏
  • 举报
回复
obj.push(sex[i])之后又能使用for...in。。
我又迷茫了。。
XNightSky 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ws_hgo 的回复:]

引用 2 楼 summer__xt 的回复:
push 方法
将新元素添加到一个数组中,并返回数组的新长度值。

sex 所获取的不是一个对象数组?
费解。。。


JScript code
var sex = document.getElementsByName("rdoSex");

这个方法返回的是一个sex对象数组啊!
[/Quote]
因为是对象数组,所以for..in遍历了对象中的所有属性?好像不是所有。。我的理解对吗?
XNightSky 2010-04-06
  • 打赏
  • 举报
回复
尽管 for...in 循环看起来像 VBScript 的 For Each...Next 循环,其实并不一样。JScript 的 for...in 循环重复Jscript 对象所有的属性。VBScript 的 For Each...Next 循环重复集合中的所有项目。要循环 JScript 中的所有集合,需要用 Enumerator 对象。尽管某些对象(像 Internet 浏览器中的那些)支持 VBScript 的 For Each...Next 和 Jscript 的 for...in 循环,但多数对象并不都支持。

拿以上的for...in,循环alert()了2个单选按钮的属性:长度、类型、是否被选择。。
我翻文档翻到的。。。
其实我只想知道这段话。。
ws_hgo 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 summer__xt 的回复:]
push 方法
将新元素添加到一个数组中,并返回数组的新长度值。

sex 所获取的不是一个对象数组?
费解。。。
[/Quote]

 var sex = document.getElementsByName("rdoSex");

这个方法返回的是一个sex对象数组啊!
ws_hgo 2010-04-06
  • 打赏
  • 举报
回复
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<script language="javascript" type="text/javascript">
function checkSex(){
var sex = document.getElementsByName("rdoSex");
for(var i=0;i<sex.length;i++)
{
alert(i);
if(sex[i].checked == true){
return true;
}
}
}
</script>
</head>

<body>
<form action="" method="post" onsubmit="checkSex()">
<input name="rdoSex" type="radio" value="男" />男
<input name="rdoSex" type="radio" value="女" />女<br/>
<input name="" type="submit" />
</form>
</body>
</html>
XNightSky 2010-04-06
  • 打赏
  • 举报
回复
push 方法
将新元素添加到一个数组中,并返回数组的新长度值。

sex 所获取的不是一个对象数组?
费解。。。
shan1119 2010-04-06
  • 打赏
  • 举报
回复
<script language="javascript" type="text/javascript">
function checkSex(){
var sex = document.getElementsByName("rdoSex");
var obj=[];
for(var i=0;i<sex.length;i++)obj.push(sex[i]);
for(var i in obj){alert(i);
if(obj[i].checked == true){
return true;
}
}
/*for(var i=0;i<sex.length;i++){alert(sex[i].checked)
if(sex[i].checked == true){
return true;
}
}*/
alert(" 宣b性+R");
return false;
}
</script>

比較比較

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧