兼容性:支持所有的主流浏览器,不支持IE6以下的IE浏览器
一、for...in声明用于对数组或者对象的属性进行循环/迭代操作。
循环中的循环计数器是字符串
,而不是数字
。它包含当前属性的名称
或当前数组元素的索引
- 对于数组 ,迭代出来的是数组元素的索引 。
- 数组元素是组成数组的基本单元。数组元素也是一种变量, 其标识方法为数组名后跟一个下标。下标表示了元素在数组中的顺序号。数组元素通常也称为下标变量。
- 对于对象 ,迭代出来的是对象的属性。
- 数组遍历
var array = ["admin", "manager", "db"];
Array.prototype.name = "zhangshan";
for (var i in array) {
/如果不是该对象自身直接创建的属性(也就是该属//性是原型中的属性),则跳过显示
if (!array.hasOwnProperty(i)) {
continue;
}
console.log(array[i]);
}
//admin,manager,db
使用for in 也可以遍历数组,但是会存在以下问题:
- index索引为字符串型数字,不能直接进行几何运算
- 遍历顺序有可能不是按照实际数组的内部顺序
- for..in循环会把某个类型的原型(prototype)中方法与属性给遍历出来,所以这可能会导致代码中出现意外的错误。
为了避免这个问题,我们可以使用对象的hasOwnProperty()方法来避免这个问题。hasOwnProperty (支持所有的主流浏览器)是 JavaScript 中唯一一个只涉及对象自身属性而不会遍历原型链的方法。
所以for in更适合遍历对象,不要使用for in遍历数组。
- 对象遍历
var obj = {
w: "wen",
j: "jian",
b: "bao"
}
for (var v in obj) {
console.log(v+":"+obj[v].name);
}
//w:wen
//j:jian
//b:bao
二、判断对象是否为数组/对象的元素/属性
格式:(变量 in 对象)
- 当“对象”为数组时,“变量”指的是数组的“索引”;
- 当“对象”为对象是,“变量”指的是对象的“属性”。
- 数组
var list = [{id:1,name:11},{id:2,name:22},{id:3,name:33}];
if(1 in list){
console.log(1+":"+list[1].name); //1:22
}
- 对象
var obj={
w:"wen",
j:"jian",
b:"bao"
}
var result=(2 in obj); //false
var result1=("j" in obj); //true