• 定义与用法
for/in 语句用于循环对象属性。循环中的代码每执行一次,就会对数组的元素或者对象的属性进行一次操作。
注意:不要使用for/in 语句来循环数组的索引,可以使用for语句来代替。
• 语法:
for (var el in object) { //执行的代码块 }
参数 | 可省略? |
---|---|
el | 必须 指定的变量可以是数组元素,也可以是对象的属性。 |
object | 必须。指定迭代的的对象。 |
•描述:
for...in 循环只遍历可枚举属性。像 Array 和 Object 使用内置构造函数所创建的对象都会继承自 Object.prototype 和 String.prototype 的不可枚举属性,例如 String 的 indexOf() 方法或者 Object 的 toString 方法。循环将迭代对象的所有可枚举属性和从它的构造函数的 prototype 继承而来的(包括被覆盖的内建属性)。
用for/in语句可以遍历一个对象"可枚举"的属性,但并非一个对象的所有属性都是可枚举的,通过JavaScript代码添加到对象的属性是可枚举的,而内部对象的预定义属性(如方法)通常是不可枚举的.
• 案例
先来看看for/in在遍历数组和对象上有什么区别
- 遍历数组
var arr = ['a','b','c'];
var keys = [];
var values = [];
for(var k in arr){
keys.push(k);
values.push(arr[k])
}
console.log(keys); //["0", "1", "2"]
console.log(values); //["a", "b", "c"]
- 遍历对象
var obj = {a:1 ,b:2 ,c:3}
var keys = [];
var values = [];
for(var k in obj){
keys.push(k);
values.push(obj[k])
}
console.log(keys); //["a", "b", "c"]
console.log(values); // [1, 2, 3]
//遍历数组时k代表的是数组的索引值
遍历对象时k代表的是对象的键名,所以说不适合遍历数组,性能不佳
4.1
var stu = {
name : 'zhou',
age : 12,
sex : 'girl'
};
var content = '';
for(var key in stu){
content += key + ":" + stu[key] + ' ,'
}
"name:zhou ,age:12 ,sex:girl ,"
4.2
var myarr = new Array('red','pengxl','china');
var content2 = ''
for(var key in myarr){
content2 += key+':'+myarr[key]+' ,';
}
"0:red ,1:pengxl ,2:china ,"
4.3
For 与 for/in
对对象的for(var i=0;i
参考资料:
1.MDN :https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array
2.菜鸟教程:http://www.runoob.com/jsref/jsref-obj-array.html