//在遍历数组上的异同
var arr = ['a','b','c'];
for(var i = 0;i < arr.length;i++){
console.log(typeof(i));//number
console.log(arr[i]);//a,b,c
}
var att = ['a','b','c'];
for(var j in att){
console.log(typeof(j));//string
console.log(att[j]);//a,b,c
}
for循环和for in循环都可以遍历获取到数组的内容;
for循环获取数组下标的typeof类型为number;
for in 循环获取数组下标的typeof类型为string;
//在遍历对象上的异同
var obj = new Object({
name:"Simon",
age:"16",
city:"BJ"
});
console.log(obj.length);//undefined
for(var i = 0;i < obj.length;i++){
console.log(i);//空的
console.log(obj[i]);//空的
}
for(var j in obj){
console.log(j);//name,age,city
console.log(obj[j]);//simon,16,BJ
}
for循环不能用于循环对象,因为for循环无法获取obj.length,所以for循环只能用于数组操作;
for in 循环可以获取对象的键值,可以操作数组,还可操作对象;
-----------------------------------------分割线-----------------------------------------------------------
但是:在操作数组的性能上:for循环的性能要高于for in 循环;
贺师俊老师在知乎说到(链接:https://www.zhihu.com/question/38472789/answer/76649492):
for...in 效率是最低的。这是因为 for...in 有一些特殊的要求,包括:
1. 遍历所有属性,不仅是 own properties 也包括原型链上的所有属性。
2. 忽略 enumerable 为 false 的属性。
3. 必须按特定顺序遍历,先遍历所有数字键,然后按照创建属性的顺序遍历剩下的。