作用:循环对象或者数组
语法:
for (变量名 in 数组名/对象名){
}
举例:
var obj = {
name : 'abc',
age : 18,
sex : '男'
};
var arr = ['abc', 18, '男'];
for(prop in obj){
console.log(prop); //name age sex
console.log(typeof(prop)); //string
}
for(prop in arr){
console.log(prop); //0 1 2
console.log(typeof(prop)); //string
}
从结果我们可以看到如果for in循环的是对象,那么它的变量名就是对象的属性名,如果循环的是数组,那么它的变量名就是数组的索引。而且它的变量名是字符串类型的。
但是如果我们这么来写
var obj = {
name : 'abc',
age : 18,
sex : '男'
}
Object.prototype.address = '重庆';
for(prop in obj){
console.log(prop); //name age sex address
}
诶,明明我们在obj里面没有写address,怎么给我输出了一个address呢。那是因为for in循环会把某个类型原型中的方法与属性遍历出来,这样的话可能会引起不必要的麻烦。
于是我们可以这样写
var obj = {
name : 'abc',
age : 18,
sex : '男'
}
Object.prototype.address = '重庆';
for(prop in obj){
if(obj.hasOwnProperty(prop)){
console.log(prop); //name age sex
}
}
var obj1 = {
name : 'abc',
age : 18,
sex : '男'
};
var obj2 = {};
for(prop in obj1){
obj2[prop] = obj1[prop];
}
console.log(obj2);
//输出{name: "abc", age: 18, sex: "男"}
obj2[age] = 18; //报错
obj2[age]; //报错
obj2.age = 18; //{age: 18}
obj2[name] = 'abc'; //{'': 'abc'}
obj2[name]; //'abc'
obj2.name; //'abc'
为什么在for in循环中不报错而在外面写却会报错。
这是因为访问对象的属性有两种方法
在for in循环中,由于prop是字符串类型,所以相当于用的是第二种访问方式
而在上面的代码中,obj2[age]这种方式,age代表一个变量,这个变量明显没有定义,所以会报错。但是如果obj2.age = 18,这种方式却可以定义一个属性。
我们可以看到在上面还有一种情况,那就是obj2[name] = 'abc’居然不报错,而且结果是{" ": ‘abc’}。
这是因为name这个变量有点特殊,每个窗口都有一个name属性,默认是空的。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- igbc.cn 版权所有 湘ICP备2023023988号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务