本文已参与「新人创作礼」活动,一起开启掘金创作之路
for与for in的区别
从学习C语言开始就学习了遍历,for更是用的特别熟悉。在javascript中除了有for循环还有for in,刚开始接触for in的时候总是把他当for来使用。感觉没什么区别然而在最近写项目时遇到了这个for in才知悉了他与for的不同,果然还是实践出真知。下面先简单介绍一下for 和 for in吧:
for的语法结构:
for( 初始值;判断条件;步幅){ code }
for( var i =0;i<5;i++ ){
//i初始值为0;i是否小写5;每次循环后i加1
console.log(i);// 0 1 2 3 4
}
for in的写法:
var man = {
age:21,
name:"张三",
sex:"男"
}
console.log(man);
//结果:Object
age: 21
name: "张三"
sex: "男"
__proto__: Object
for(var attr in man){//attr是属性,attr可以换成任意变量名
console.log(attr);// 输出的是 属性名:age name sex
console.log(wq[attr]);//属性相对应的值 20 咸鱼 男
}
看到这里我相信有些人已经看明白了。不过我还是多嘴说一下吧,上面的for循环就是我们常用的方法用来遍历,十分简单的操作。而下面的for in呢?他一般时用来遍历对象的,在我的理解看来,for 循环可以遍历一个数组属于一维,而for in遍历对象,对象有多个属性,各个属性又有各自 的值相当于二位数组了。在上面的案例里面,想要获取对象的属性相应的值for是遍历不了的,这个时候for in就出场了。但使用for in的时候还要注意几个小问题:
而for in就不同了,上面的案例中,对象wq里有三个属性和相对应的值,想要获取到这三个属性及相对应的值for是办不到的,只有for in才可以,所以说,for in一般都是用在遍历对象的,另外,for in也可以遍历数组,但是会存在以下几个问题。
1、 for in这种循环i是string类型的,不能直接进行几何运算
2、遍历顺序有可能不是按照实际数组的内部顺序
3、使用for in会遍历数组所有的可枚举属性,包括原型。例如上栗的原型方法method和name属性
4、简而言之,for-in是为普通对象设计的,你可以遍历得到字符串类型的键,因此不适用于数组遍历。
所以说for in也有他的局限性,因此遍历一般的数组用for比较好,遍历对象就需要for in了