javascript - JS 两种for有什么区别?
本文介绍了javascript - JS 两种for有什么区别?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
如下代码,使用:
for(i = 0; i < mycars.length; i++) {
console.log(IsNullOrWhiteSpace(mycars[i]))
}
就会陷入死循环。
而使用:
for(var i in mycars) {
console.log(IsNullOrWhiteSpace(mycars[i]))
}
代码则正常运行,两种循环有什么区别?
完整代码如下:
function IsNullOrWhiteSpace(value) {
if(value != null) {
for(i = 0; i < value.length; i++) {
if(!isWhitespace(value[i])) {
return false;
}
}
}
return true;
}
function isWhitespace(s) {
var whitespace = " \t\n\r";
var i;
for(i = 0; i < s.length; i++) {
var c = s.charAt(i);
if(whitespace.indexOf(c) >= 0) {
return true;
}
}
return false;
}
var mycars = new Array();
mycars[0] = "Saab";
mycars[1] = " Volvo";
mycars[2] = "BMW";
mycars[3] = "BMW";
mycars[4] = "BMW";
mycars[5] = " ";
mycars[6] = "";
mycars[7] = null;
// for(i = 0; i < mycars.length; i++) {
// console.log(IsNullOrWhiteSpace(mycars[i]))
// }
for(var i in mycars) {
console.log(IsNullOrWhiteSpace(mycars[i]))
}
解决方案
for(i = 0; i < mycars.length; i++) {
console.log(IsNullOrWhiteSpace(mycars[i]))
}
你所有的循环体都没有使用var去定义i,导致i成了全局变量,重复赋值导致i取值不确定,因此可能导致死循环了。赋值过程请自行debug。
这篇关于javascript - JS 两种for有什么区别?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文