国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JavaScript中for..in循環(huán)陷阱介紹

2019-11-20 21:43:28
字體:
供稿:網(wǎng)友
大家都知道在JavaScript中提供了兩種方式迭代對象:
(1)for 循環(huán);
(2)for..in循環(huán);
使用for循環(huán)進(jìn)行迭代數(shù)組對象,想必大家都已經(jīng)司空見慣了。但是,使用for.. in循環(huán)時,大家可要注意了,為什么這么說呢?大家聽我娓娓道來....
javascript提供了一種特殊的循環(huán)(也就是for .. in循環(huán)),用來迭代對象的屬性或數(shù)組的每個元素,for...in循環(huán)中的循環(huán)計數(shù)器是字符串,而不是數(shù)字。它包含當(dāng)前屬性的名稱或當(dāng)前數(shù)組元素的索引。
案例一:
復(fù)制代碼 代碼如下:

//使用for..in循環(huán)遍歷對象屬性
varperson={
name: "Admin",
age: 21,
address:"shandong"
};
for(vari in person){
console.log(i);
}

執(zhí)行結(jié)果為:
name
age
address
當(dāng)遍歷一個對象的時候,變量 i 也就是循環(huán)計數(shù)器 為 對象的屬性名
復(fù)制代碼 代碼如下:

//使用for..in循環(huán)遍歷數(shù)組
vararray = ["admin","manager","db"]
for(vari in array){
console.log(i);
}

執(zhí)行結(jié)果:
0
1
2
當(dāng)遍歷一個數(shù)組的時候,變量 i 也就是循環(huán)計數(shù)器 為 當(dāng)前數(shù)組元素的索引
案例二:
但是,現(xiàn)在看來for .. in循環(huán)還挺好用啊,不過,別高興太早,看看下面的例子:
復(fù)制代碼 代碼如下:

var array =["admin","manager","db"];
//給Array的原型添加一個name屬性
Array.prototype.name= "zhangsan";
for(var i in array){
alert(array[i]);
}

運行結(jié)果:
admin
manager
db
zhangsan
咦,奇觀了,怎么平白無故的冒出來一個zhangsan
現(xiàn)在,再看看使用 for循環(huán)會怎樣?
復(fù)制代碼 代碼如下:

vararray = ["admin","manager","db"];
//給Array的原型添加一個name屬性
Array.prototype.name = "zhangsan";
for(var i =0 ; i<array.length; i++){
alert(array[i]);
};

運行結(jié)果:
admin
manager
db
哦, 現(xiàn)在明白了,for..in循環(huán)會把某個類型的原型(prototype)中方法與屬性給遍歷出來,所以這可能會導(dǎo)致代碼中出現(xiàn)意外的錯誤。為了避免這個問題,我們可以使用對象的hasOwnProperty()方法來避免這個問題,如果對象的屬性或方法是非繼承的,那么hasOwnProperty() 方法返回true。即這里的檢查不涉及從其他對象繼承的屬性和方法,只會檢查在特定對象自身中直接創(chuàng)建的屬性。
案例三:
復(fù)制代碼 代碼如下:

vararray = ["admin","manager","db"];
Array.prototype.name= "zhangshan";
for(vari in array){
//如果不是該對象自身直接創(chuàng)建的屬性(也就是該屬//性是原型中的屬性),則跳過顯示
if(!array.hasOwnProperty(i)){
continue;
}
alert(array[i]);
}

運行結(jié)果:
admin
manager
db
一切又完好如初,哎,不知道,同志們看完有什么感受,是不是有種“撥開云霧見晴天”的感覺啊,呵呵
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 达尔| 泰和县| 伊宁市| 自贡市| 高碑店市| 阿尔山市| 噶尔县| 丽江市| 南召县| 崇文区| 长武县| 双柏县| 山西省| 陇南市| 昂仁县| 阿城市| 集贤县| 五台县| 镇沅| 兴义市| 杭州市| 莎车县| 华宁县| 河南省| 芒康县| 宣城市| 青河县| 阜阳市| 邻水| 丹巴县| 稻城县| 禹城市| 武宣县| 罗城| 子洲县| 大田县| 绥中县| 庄河市| 鹤岗市| 岳阳市| 博客|