JavaScript中for..in循環(huán)陷阱介紹
更新時(shí)間:2013年11月12日 17:28:31 作者:
for...in循環(huán)中的循環(huán)計(jì)數(shù)器是字符串,而不是數(shù)字它包含當(dāng)前屬性的名稱或當(dāng)前數(shù)組元素的索引,下面有個(gè)不錯(cuò)的示例大家可以參考下
大家都知道在JavaScript中提供了兩種方式迭代對(duì)象:
(1)for 循環(huán);
(2)for..in循環(huán);
使用for循環(huán)進(jìn)行迭代數(shù)組對(duì)象,想必大家都已經(jīng)司空見慣了。但是,使用for.. in循環(huán)時(shí),大家可要注意了,為什么這么說呢?大家聽我娓娓道來....
javascript提供了一種特殊的循環(huán)(也就是for .. in循環(huán)),用來迭代對(duì)象的屬性或數(shù)組的每個(gè)元素,for...in循環(huán)中的循環(huán)計(jì)數(shù)器是字符串,而不是數(shù)字。它包含當(dāng)前屬性的名稱或當(dāng)前數(shù)組元素的索引。
案例一:
//使用for..in循環(huán)遍歷對(duì)象屬性
varperson={
name: "Admin",
age: 21,
address:"shandong"
};
for(vari in person){
console.log(i);
}
執(zhí)行結(jié)果為:
name
age
address
當(dāng)遍歷一個(gè)對(duì)象的時(shí)候,變量 i 也就是循環(huán)計(jì)數(shù)器 為 對(duì)象的屬性名
//使用for..in循環(huán)遍歷數(shù)組
vararray = ["admin","manager","db"]
for(vari in array){
console.log(i);
}
執(zhí)行結(jié)果:
0
1
2
當(dāng)遍歷一個(gè)數(shù)組的時(shí)候,變量 i 也就是循環(huán)計(jì)數(shù)器 為 當(dāng)前數(shù)組元素的索引
案例二:
但是,現(xiàn)在看來for .. in循環(huán)還挺好用啊,不過,別高興太早,看看下面的例子:
var array =["admin","manager","db"];
//給Array的原型添加一個(gè)name屬性
Array.prototype.name= "zhangsan";
for(var i in array){
alert(array[i]);
}
運(yùn)行結(jié)果:
admin
manager
db
zhangsan
咦,奇觀了,怎么平白無故的冒出來一個(gè)zhangsan
現(xiàn)在,再看看使用 for循環(huán)會(huì)怎樣?
vararray = ["admin","manager","db"];
//給Array的原型添加一個(gè)name屬性
Array.prototype.name = "zhangsan";
for(var i =0 ; i<array.length; i++){
alert(array[i]);
};
運(yùn)行結(jié)果:
admin
manager
db
哦, 現(xiàn)在明白了,for..in循環(huán)會(huì)把某個(gè)類型的原型(prototype)中方法與屬性給遍歷出來,所以這可能會(huì)導(dǎo)致代碼中出現(xiàn)意外的錯(cuò)誤。為了避免這個(gè)問題,我們可以使用對(duì)象的hasOwnProperty()方法來避免這個(gè)問題,如果對(duì)象的屬性或方法是非繼承的,那么hasOwnProperty() 方法返回true。即這里的檢查不涉及從其他對(duì)象繼承的屬性和方法,只會(huì)檢查在特定對(duì)象自身中直接創(chuàng)建的屬性。
案例三:
vararray = ["admin","manager","db"];
Array.prototype.name= "zhangshan";
for(vari in array){
//如果不是該對(duì)象自身直接創(chuàng)建的屬性(也就是該屬//性是原型中的屬性),則跳過顯示
if(!array.hasOwnProperty(i)){
continue;
}
alert(array[i]);
}
運(yùn)行結(jié)果:
admin
manager
db
一切又完好如初,哎,不知道,同志們看完有什么感受,是不是有種“撥開云霧見晴天”的感覺啊,呵呵
(1)for 循環(huán);
(2)for..in循環(huán);
使用for循環(huán)進(jìn)行迭代數(shù)組對(duì)象,想必大家都已經(jīng)司空見慣了。但是,使用for.. in循環(huán)時(shí),大家可要注意了,為什么這么說呢?大家聽我娓娓道來....
javascript提供了一種特殊的循環(huán)(也就是for .. in循環(huán)),用來迭代對(duì)象的屬性或數(shù)組的每個(gè)元素,for...in循環(huán)中的循環(huán)計(jì)數(shù)器是字符串,而不是數(shù)字。它包含當(dāng)前屬性的名稱或當(dāng)前數(shù)組元素的索引。
案例一:
復(fù)制代碼 代碼如下:
//使用for..in循環(huán)遍歷對(duì)象屬性
varperson={
name: "Admin",
age: 21,
address:"shandong"
};
for(vari in person){
console.log(i);
}
執(zhí)行結(jié)果為:
name
age
address
當(dāng)遍歷一個(gè)對(duì)象的時(shí)候,變量 i 也就是循環(huán)計(jì)數(shù)器 為 對(duì)象的屬性名
復(fù)制代碼 代碼如下:
//使用for..in循環(huán)遍歷數(shù)組
vararray = ["admin","manager","db"]
for(vari in array){
console.log(i);
}
執(zhí)行結(jié)果:
0
1
2
當(dāng)遍歷一個(gè)數(shù)組的時(shí)候,變量 i 也就是循環(huán)計(jì)數(shù)器 為 當(dāng)前數(shù)組元素的索引
案例二:
但是,現(xiàn)在看來for .. in循環(huán)還挺好用啊,不過,別高興太早,看看下面的例子:
復(fù)制代碼 代碼如下:
var array =["admin","manager","db"];
//給Array的原型添加一個(gè)name屬性
Array.prototype.name= "zhangsan";
for(var i in array){
alert(array[i]);
}
運(yùn)行結(jié)果:
admin
manager
db
zhangsan
咦,奇觀了,怎么平白無故的冒出來一個(gè)zhangsan
現(xiàn)在,再看看使用 for循環(huán)會(huì)怎樣?
復(fù)制代碼 代碼如下:
vararray = ["admin","manager","db"];
//給Array的原型添加一個(gè)name屬性
Array.prototype.name = "zhangsan";
for(var i =0 ; i<array.length; i++){
alert(array[i]);
};
運(yùn)行結(jié)果:
admin
manager
db
哦, 現(xiàn)在明白了,for..in循環(huán)會(huì)把某個(gè)類型的原型(prototype)中方法與屬性給遍歷出來,所以這可能會(huì)導(dǎo)致代碼中出現(xiàn)意外的錯(cuò)誤。為了避免這個(gè)問題,我們可以使用對(duì)象的hasOwnProperty()方法來避免這個(gè)問題,如果對(duì)象的屬性或方法是非繼承的,那么hasOwnProperty() 方法返回true。即這里的檢查不涉及從其他對(duì)象繼承的屬性和方法,只會(huì)檢查在特定對(duì)象自身中直接創(chuàng)建的屬性。
案例三:
復(fù)制代碼 代碼如下:
vararray = ["admin","manager","db"];
Array.prototype.name= "zhangshan";
for(vari in array){
//如果不是該對(duì)象自身直接創(chuàng)建的屬性(也就是該屬//性是原型中的屬性),則跳過顯示
if(!array.hasOwnProperty(i)){
continue;
}
alert(array[i]);
}
運(yùn)行結(jié)果:
admin
manager
db
一切又完好如初,哎,不知道,同志們看完有什么感受,是不是有種“撥開云霧見晴天”的感覺啊,呵呵
您可能感興趣的文章:
- JavaScript使用類似break機(jī)制中斷forEach循環(huán)的方法
- 詳談js中標(biāo)準(zhǔn)for循環(huán)與foreach(for in)的區(qū)別
- Javascript數(shù)組循環(huán)遍歷之forEach詳解
- 全面解析JavaScript里的循環(huán)方法之forEach,for-in,for-of
- js的for in循環(huán)和java里foreach循環(huán)的區(qū)別分析
- javascript forEach通用循環(huán)遍歷方法
- JS數(shù)組的遍歷方式for循環(huán)與for...in
- javascript 循環(huán)語句 while、do-while、for-in、for用法區(qū)別
- javascript中for/in循環(huán)及使用技巧
- js中forEach,for in,for of循環(huán)的用法示例小結(jié)
相關(guān)文章
使用js實(shí)現(xiàn)將后臺(tái)傳入的json數(shù)據(jù)放在前臺(tái)顯示
今天小編就為大家分享一篇使用js實(shí)現(xiàn)將后臺(tái)傳入的json數(shù)據(jù)放在前臺(tái)顯示,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-08-08JS正則表達(dá)式驗(yàn)證賬號(hào)、手機(jī)號(hào)、電話和郵箱是否合法
這篇文章主要介紹了JS正則表達(dá)式驗(yàn)證賬號(hào)、手機(jī)號(hào)、電話和郵箱是否合法,需要的朋友可以參考下2017-03-03JavaScript使用簡(jiǎn)單正則表達(dá)式的數(shù)據(jù)驗(yàn)證功能示例
這篇文章主要介紹了JavaScript使用簡(jiǎn)單正則表達(dá)式的數(shù)據(jù)驗(yàn)證功能,結(jié)合實(shí)例形式分析了JS針對(duì)表單輸入內(nèi)容的簡(jiǎn)單正則驗(yàn)證操作技巧,需要的朋友可以參考下2017-01-01ionic實(shí)現(xiàn)滑動(dòng)的三種方式
這篇文章主要為大家詳細(xì)介紹了ionic實(shí)現(xiàn)滑動(dòng)的三種方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-08-08針對(duì)JavaScript中this指向的簡(jiǎn)單理解
這篇文章主要為大家詳細(xì)JavaScript中this指向的簡(jiǎn)單理解,感興趣的小伙伴們可以參考一下2016-08-08- 作為一名優(yōu)秀的接口調(diào)用工程師,對(duì)接口的返回信息進(jìn)行校驗(yàn)是必不可少的,本文整理的是一些常用的校驗(yàn)方式,希望能夠?qū)Υ蠹矣兴鶐椭?/div> 2023-05-05
Javascript?中AJAX的圖書管理代碼實(shí)例詳解
這篇文章主要為大家詳細(xì)介紹了AJAX的圖書管理代碼實(shí)例,使用數(shù)據(jù)庫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02最新評(píng)論