最近一直有在面試螟加,各種準(zhǔn)備,博客吞琐,慕課網(wǎng)都成了忱μ剑客,看了那么久那么認(rèn)真站粟,都把自己給感動(dòng)了黍图,然而呢,一道題幾家公司幾家問奴烙,知道就是說不出來助被,網(wǎng)上一看很多剖张,說的也很對,看完是懂了揩环,但是沒有自己去整理去記憶搔弄,還是會被一次次問的語無倫次,所以就從這篇開始吧丰滑。
這道題有兩家公司都有問到顾犹,表現(xiàn)的都不理想,從一開始的答不出來吨枉,到后邊的答不到重點(diǎn)蹦渣,進(jìn)步很小哄芜,慚愧呀貌亭,話不多說,開始學(xué)習(xí)认臊。
for...in根據(jù)key遍歷
for...in區(qū)別:
- 遍歷對象時(shí)會從原型上繼承屬性圃庭,可以用hasOwnProperty()識別出繼承屬性,
- 遍歷數(shù)組會把數(shù)組下標(biāo)看做屬性名失晴,也就輸出結(jié)果是數(shù)組的下標(biāo)剧腻,且不一定按照數(shù)組的索引順序。
- 輸出結(jié)果是字符串
function Person(name){
this.name = name;
}
Person.prototype.getName = function(){
return this.name;
}
var child= new Person('lala');
for (let i in child){
console.log(i);
}
//name
//getName
for (let i in child){
if(child.hasOwnProperty(i)){
console.log(i);
}
}
//name
var aa = ['aa','bb','cc'];
for(let i in aa){
console.log(i);
}
// 0 1 2
for...of根據(jù)值遍歷
for...of用來遍歷數(shù)據(jù)涂屁,例如數(shù)組中的值书在,但是也可以遍歷字符串,支持Map和Set對象的遍歷拆又,避免了所有for...in的弊端儒旬,與forEach相比可以正確響應(yīng)break,continue帖族,return語句栈源。
var aa = ['aa','bb','cc'];
for(let i of aa){
console.log(i);
}
// aa bb cc
var str='abc';
for(let i of str){
console.log(i);
}
// a b c
var set=new Set(['aa','bb','cc']);
for(let i of set){
console.log(i);
}
//aa bb cc
forEach根據(jù)index遍歷
forEach一般只能適用于數(shù)組,功能是從頭到尾把數(shù)組遍歷一遍,可以有三個(gè)參數(shù)竖般,后兩個(gè)可以不寫
var arr = ['aa','bb'];
arr.forEach(function(v,i,a){
console.log(v,i,a);//分別對應(yīng):數(shù)組元素甚垦,元素的索引,數(shù)組本身
});
//aa 0 ['aa','bb']
//bb 1 ['aa','bb']
講真基礎(chǔ)還是需要多練習(xí)涣雕,聽說forEach是for循環(huán)的加強(qiáng)版艰亮,就想自己去實(shí)現(xiàn)下,結(jié)果想的有些復(fù)雜了還沒做出來挣郭,于是百度了下垃杖,居然那么簡單。
Array.prototype.eachFor = function(fn){
for(let i=0;i<this.length;i++){
fn(this[i],i,this);
}
}
var aa=[5,6,7];
aa.eachFor(function(v,i){
console.log(v,i);
});
//5 0
//6 1
//7 2
map根據(jù)index遍歷
和forEach相比丈屹,使用方法一樣有三個(gè)參數(shù)调俘,map只能對元素進(jìn)行加工處理伶棒,產(chǎn)生一個(gè)新的數(shù)組對象。
var arr=[1,2,3];
arr.map(function(v,i,arr){
return v*2;
});
//[2,4,6]
filter
filter對原數(shù)組進(jìn)行過濾篩選彩库,生成新的數(shù)組,使用和map樣有三個(gè)參數(shù)肤无。如果對空數(shù)組進(jìn)行篩選,會返回undefined骇钦。filter不會改變原數(shù)組宛渐。
var aa=[1,2,1,2,3];
aa.filter(function(v,i,self){
return self.indexOf(v) == i;
});
//[1,2,3]
for
for常規(guī)語句遍歷,可循環(huán)數(shù)字,字符串眯搭,數(shù)組
for(let i=0;i<5;i++){
console.log(i);
}
//0 1 2 3 4