标签:reject promise javascrip ref html blank query pre new
先说结论:遍历对象用for in 遍历数组用for of
不要用for in 遍历数组会出问题,实际中已经遇到了
function getAreaQueryGrid(res) {
let features = new ol.format.GeoJSON().readFeatures(res);
for (let i in features) {
if (typeof (features[i].values_) == "undefined") {
} else {
data.push(features[i].values_)
}
}
}
这里就是for in 最后会莫名其妙多几个
,这里加了个判断,其实不用for in 用传统的for 或者用for of 就能解决了。
1.传统的for
其实他挺好的,不会出错,效率也不错,
2.for in
? for-in 遍历原型链上的属性。所以遍历数组会出问题
3.forEach
? 不能break 和 return,默认是并行的
4.for of
for of不能遍历普通对象
? 不仅支持数组,还支持大多数类数组对象,也支持字符串遍历
let arr = [1,3,5,7,9];
console.log(arr);
for (let i = 0 ; i <arr.length;i++){
console.log("for=========="+arr[i]);
}
for (let i in arr){
console.log("for...in==========="+arr[i]);
}
arr.forEach(element => {
console.log("foreach============ "+element);//foreach也是,不是key
});
for ( i of arr){
console.log("for...of==========="+i);
}//注意,for of中的i就是本身,不是对应的key,不要写成arr[i]这种格式了
forEach默认是并行的
function sleep(num){
return new Promise ((resolve,reject)=>{
setInterval(()=>{
resolve(num*num)
},1000)
})
};
function test (){
arr.forEach(async x =>{
let res = await sleep(x);
console.log("foreach========="+res);
})
}
test()
async function testforof(){
for (x of arr) {
let res = await sleep(x)
console.log("testforof========"+res);
}
}
testforof()
这里foreach 会直接输出1,9,25,49,81
换成for of 就会每隔一秒输出一个
标签:reject promise javascrip ref html blank query pre new
原文地址:https://www.cnblogs.com/zcbj588/p/14700011.html