我在看了http://topic.csdn.net/u/20091030/23/1D7B29B3-65F4-4FE7-B618-882A1910034A.html此帖后,
看到14楼的 yixianggao的回复后,<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>
</head>
<body onload="fun();">
</body></html> <script type="text/javascript">
function fun(){
var temp = new Array(1,1,2,4,4,1,2,1,1,21); var str = "";
for (var i = 0,item; item = temp[i]; i++){
str = str + item +"------------";
alert(str);
}
document.write(str);
}
</script>
// 这样能打印出来结果<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>
</head>
<body onload="fun();">
</body></html> <script type="text/javascript">
function fun(){
var temp = new Array();
var length = temp.length;
var item ;
for(var i = 0; i < length; i++){
temp[i] = i;
}
var str = "";
for (var i = 0,item; item = temp[i]; i++){
str = str + item +"----------------";
alert(str);
}
document.write(str);
}
</script>// 这样打印出来的结果是空的
// 听那个14楼yixianggao的说是,JS的特性 [可以充分利用 js 的特性,不必读取 length,并将定位与赋值分离]
那我一个初始化时赋值, 一个初始化后再赋值,为什么会有区别呢,请教大家了
看到14楼的 yixianggao的回复后,<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>
</head>
<body onload="fun();">
</body></html> <script type="text/javascript">
function fun(){
var temp = new Array(1,1,2,4,4,1,2,1,1,21); var str = "";
for (var i = 0,item; item = temp[i]; i++){
str = str + item +"------------";
alert(str);
}
document.write(str);
}
</script>
// 这样能打印出来结果<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>
</head>
<body onload="fun();">
</body></html> <script type="text/javascript">
function fun(){
var temp = new Array();
var length = temp.length;
var item ;
for(var i = 0; i < length; i++){
temp[i] = i;
}
var str = "";
for (var i = 0,item; item = temp[i]; i++){
str = str + item +"----------------";
alert(str);
}
document.write(str);
}
</script>// 这样打印出来的结果是空的
// 听那个14楼yixianggao的说是,JS的特性 [可以充分利用 js 的特性,不必读取 length,并将定位与赋值分离]
那我一个初始化时赋值, 一个初始化后再赋值,为什么会有区别呢,请教大家了
<head>
<title>js中for遍历数组的效率</title>
<style type="text/css">
#info {
color:#FF0000;
height:150px;
}
</style>
</head>
<body>
<div id="div1">
<input value="5000" type="text" id="txt1"/><input type="button" id="btn1" value="生成 checkbox"/>
<div id="info">
<input type="button" id="btnTest1" onclick="fun1(this)" value="第一种"/><span></span><br/>
<input type="button" id="btnTest2" onclick="fun2(this)" value="第二种"/><span></span><br/>
<input type="button" id="btnTest3" onclick="fun3(this)" value="第三种"/><span></span><br/>
</div>
<div id="box"></div>
</div>
</body>
<script type="text/javascript">
var g=function(id) {return document.getElementById(id);};
g("btn1").onclick=function() {
var val=g("txt1").value-0;
if(!isNaN(val)) {
var box=g("box");
box.innerHTML="";
for(var i=0;i<val;i++) {
var chk=document.createElement("input");
chk.type="checkbox";
box.appendChild(chk);
}
}
}
//这里为了简单就没有判断type
var fun1=function(obj) {//第一种直接在for中取数组长度
var chks=g("box").getElementsByTagName("input");
var b=!chks[0].checked;
var d=new Date();
for(var i=0;i<chks.length;i++) {
chks[i].checked=b;
}
obj.nextSibling.innerHTML=new Date()-d;
}
var fun2=function(obj) {//第二种
var chks=g("box").getElementsByTagName("input");
var b=!chks[0].checked;
var d=new Date();
for(var i=0,chk;chk=chks[i];i++) {//跟第三种一样效率
chk.checked=b;
}
obj.nextSibling.innerHTML=new Date()-d;
}
var fun3=function(obj) {//第三种将数组的长度放到一个局部变量中
var chks=g("box").getElementsByTagName("input");
var b=!chks[0].checked;
var length=chks.length;
var d=new Date();
for(var i=0;i<length;i++) {
chks[i].checked=b;
}
obj.nextSibling.innerHTML=new Date()-d;
}
</script>
</html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>
</head>
<body onload="fun();">
</body></html> <script type="text/javascript">
function fun(){
var temp = new Array(10); // 初始化10个元素 发的时候一不小心漏了
var length = temp.length;
var item ;
for(var i = 0; i < length; i++){ /* 这边是加数据啊 */
temp[i] = i;
}
var str = "";
for (var i = 0,item; item = temp[i]; i++){
str = str + item +"----------------";
alert(str);
}
document.write(str);
}
</script>
1,script标签放到body后,html前
2.temp[0]=0;转化为bool为false,所以for循环一次也没执行,最好不要用第二种
关注中,不太明白temp[0]=0;转化为bool为false..? 基础不好,嘿嘿
这一句循环的条件是item=temp[i],如果索引超出界限,temp[i]应该是undefined,然后转化为bool时就为false,循环就不会执行了,工作正常
但是他这个数组 是0开始 的,temp[0]=0;转化为bool也为false,循环没有执行网址中的例子checkbox数组,所以可以判断
ps:
for执行时,执行初始化语句,并判断第二个分号前的表达式是否为真,为真则执行for内语句 ,然后再执行第二个分号后,再判断第二个分号前的表达式
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>
</head>
<body onload="fun();">
</body> <script type="text/javascript">
function fun(){
var temp = new Array(0,1,2,4,4,1,2,1,1,21); var str = "";
for (var i = 0,item; ((item = temp[i])==undefined?false:true); i++){
str = str + item +"------------";
alert(str);
}
document.write(str);
}
</script></html>整理一下,这样还行?
1.for (var i = 0,item; item = temp[i]; i++)这种方式循环,如果数组中有一个值为0,则会退出循环。不太保险啊,这种方式写循环。