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]))
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
for(i = 0; i < mycars.length; i++) {
}
你所有的循环体都没有使用var去定义i,导致i成了全局变量,重复赋值导致i取值不确定,因此可能导致死循环了。赋值过程请自行debug。
前者的循环条件是 只要满足
i < mycars.length
这个条件就会进入里执行。而后者的意思是遍历mycars这个对象的属性如果对对象格式的数据进行遍历,两者中 for in 才能起作用了。
比如:
第一个for循环,i 改成 j 吧...全局变量不能随便复用
for 循环常用来遍历数组,因为 for 循环可以循序的遍历数组
而 for in 循环则不然,故 for in 循环常用来遍历对象
外面的for循环没有任何问题,死循环肯定是IsNullOrWhiteSpace这个函数里的循环导致的,好好检查一下逻辑
至于楼上说的加不加var影响不大,因为在js中for和if语句都不会产生局部变量,加var不加var for中生成的i在外部也可以访问到。只有function会产生局部变量
不过IsNullOrWhiteSpace这个函数中的i必须要加var,不然会覆盖全局的变量i
谢邀。我曾罗列过for类语句使用的地方,希望有助 for
第一个for循环里,那个 i 没有声明,你写成 var i=0 ,试试。