通過(guò)實(shí)例解析JavaScript for in及for of區(qū)別
對(duì)數(shù)組的遍歷大家最常用的就是for循環(huán),ES5的話(huà)也可以使用forEach,ES5具有遍歷數(shù)組功能的還有map、filter、some、every、reduce、reduceRight等,只不過(guò)他們的返回結(jié)果不一樣。但是使用foreach遍歷數(shù)組的話(huà),使用break不能中斷循環(huán),使用return也不能返回到外層函數(shù)。
那么接下來(lái)我們一起看一下for in 和for of 的區(qū)別吧。
for in
看一個(gè)簡(jiǎn)單的例子
//for in 應(yīng)用于數(shù)組
Array.prototype.sayHello = function(){
console.log("Hello")
}
Array.prototype.str = 'world';
var myArray = [1,2,10,30,100];
myArray.name='數(shù)組';
for(let index in myArray){
console.log(index);
}
//輸出結(jié)果如下
0,1,2,3,4,name,str,sayHello
//for in 應(yīng)用于對(duì)象中
Object.prototype.sayHello = function(){
console.log('Hello');
}
Obeject.prototype.str = 'World';
var myObject = {name:'zhangsan',age:100};
for(let index in myObject){
console.log(index);
}
//輸出結(jié)果
name,age,str,sayHello
//首先輸出的是對(duì)象的屬性名,再是對(duì)象原型中的屬性和方法,
//如果不想讓其輸出原型中的屬性和方法,可以使用hasOwnProperty方法進(jìn)行過(guò)濾
for(let index in myObject){
if(myObject.hasOwnProperty(index)){
console.log(index)
}
}
//輸出結(jié)果為
name,age
//你也可以用Object.keys()方法獲取所有的自身可枚舉屬性組成的數(shù)組。
Object.keys(myObject)
可以看出for in 應(yīng)用于數(shù)組循環(huán)返回的是數(shù)組的下標(biāo)和數(shù)組的屬性和原型上的方法和屬性,而for in應(yīng)用于對(duì)象循環(huán)返回的是對(duì)象的屬性名和原型中的方法和屬性。
使用for in 也可以遍歷數(shù)組,但是會(huì)存在以下問(wèn)題:
1.index索引為字符串型數(shù)字,不能直接進(jìn)行幾何運(yùn)算
2.遍歷順序有可能不是按照實(shí)際數(shù)組的內(nèi)部順序
3.使用for in會(huì)遍歷數(shù)組所有的可枚舉屬性,包括原型。例如上栗的原型方法method和name屬性
Object.prototype.sayHello = function(){
console.log('Hello');
}
var myObject = {
name:'zhangsan',
age:10
}
for(let key of myObject){
consoloe.log(key);
}
//輸出結(jié)果
//typeError
Array.prototype.sayHello = function(){
console.log("Hello");
}
var myArray = [1,200,3,400,100];
for(let key of myArray){
console.log(key);
}
//輸出結(jié)果
1,200,3,400,100
for in遍歷的是數(shù)組的索引(即鍵名),而for of遍歷的是數(shù)組元素值。 所以for in更適合遍歷對(duì)象,不要使用for in遍歷數(shù)組。JavaScript for in 和 for of 的區(qū)別
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
基于JS實(shí)現(xiàn)簡(jiǎn)單滑塊拼圖游戲
本文通過(guò)實(shí)例代碼給大家介紹了JS實(shí)現(xiàn)簡(jiǎn)單滑塊拼圖游戲,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2019-10-10
javascript appendChild,innerHTML,join性能比較代碼
在實(shí)際應(yīng)用中,應(yīng)該避免直接用innerHTML,對(duì)于大量的字符連接運(yùn)算,應(yīng)該考慮先運(yùn)算再輸出。2009-08-08
JavaScript自定義Webpack配置實(shí)現(xiàn)流程介紹
本系列主要整理前端面試中需要掌握的知識(shí)點(diǎn)。本節(jié)介紹webpack如何優(yōu)化前端性能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-10-10
TypeScript與JavaScript項(xiàng)目里引入MD5校驗(yàn)和
這篇文章主要介紹了TypeScript與JavaScript項(xiàng)目里引入MD5校驗(yàn)和,MD5校驗(yàn)和可以用于驗(yàn)證網(wǎng)絡(luò)文件傳輸?shù)耐暾砸约胺乐刮募蝗舜鄹摹O挛奈覀兙鸵黄饋?lái)學(xué)習(xí)TypeScript與JavaScript項(xiàng)目里引入MD5校驗(yàn)和_MD5校驗(yàn),需要的朋友可以參考一下2022-02-02
js實(shí)現(xiàn)一個(gè)鏈接打開(kāi)兩個(gè)鏈接地址的方法
這篇文章主要介紹了js實(shí)現(xiàn)一個(gè)鏈接打開(kāi)兩個(gè)鏈接地址的方法,可實(shí)現(xiàn)連續(xù)打開(kāi)兩個(gè)鏈接的功能,非常簡(jiǎn)單實(shí)用的技巧,需要的朋友可以參考下2015-05-05

