兼容性:支持所有的主流瀏覽器,不支持IE6以下的IE瀏覽器
一、for...in聲明用于對數(shù)組或者對象的屬性進行循環(huán)/迭代操作。
循環(huán)中的循環(huán)計數(shù)器是字符串
,而不是數(shù)字
。它包含當(dāng)前屬性的名稱
或當(dāng)前數(shù)組元素的索引
- 對于數(shù)組 ,迭代出來的是數(shù)組元素的索引 。
- 數(shù)組元素是組成數(shù)組的基本單元。數(shù)組元素也是一種變量, 其標識方法為數(shù)組名后跟一個下標。下標表示了元素在數(shù)組中的順序號。數(shù)組元素通常也稱為下標變量。
- 對于對象 ,迭代出來的是對象的屬性。
- 數(shù)組遍歷
var array = ["admin", "manager", "db"];
Array.prototype.name = "zhangshan";
for (var i in array) {
/如果不是該對象自身直接創(chuàng)建的屬性(也就是該屬//性是原型中的屬性),則跳過顯示
if (!array.hasOwnProperty(i)) {
continue;
}
console.log(array[i]);
}
//admin,manager,db
使用for in 也可以遍歷數(shù)組,但是會存在以下問題:
- index索引為字符串型數(shù)字,不能直接進行幾何運算
- 遍歷順序有可能不是按照實際數(shù)組的內(nèi)部順序
- for..in循環(huán)會把某個類型的原型(prototype)中方法與屬性給遍歷出來,所以這可能會導(dǎo)致代碼中出現(xiàn)意外的錯誤。
為了避免這個問題,我們可以使用對象的hasOwnProperty()方法來避免這個問題。hasOwnProperty (支持所有的主流瀏覽器)是 JavaScript 中唯一一個只涉及對象自身屬性而不會遍歷原型鏈的方法。
所以for in更適合遍歷對象,不要使用for in遍歷數(shù)組。
- 對象遍歷
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
二、判斷對象是否為數(shù)組/對象的元素/屬性
格式:(變量 in 對象)
- 當(dāng)“對象”為數(shù)組時,“變量”指的是數(shù)組的“索引”;
- 當(dāng)“對象”為對象是,“變量”指的是對象的“屬性”。
- 數(shù)組
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