如下代码,使用:
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++) {
}
你所有的循环体都没有使用var去定义i,导致i成了全局变量,重复赋值导致i取值不确定,因此可能导致死循环了。赋值过程请自行debug。