const arr =[1,2]
Object.prototype.something= function (){
console.log('something')
}
for(let i=0;i<arr.length;i++){
//(1) for 不会访问原型连上的
// (2) break continue return 可以退出循环
if(i===1){
// break;
// continue;
// return;
}
console.log(i+'---'+arr[i])
}
for(let i in arr){
//(1) in 会访问原型连上的
// (2) 返回索引值
// (3) break continue 不可以退出循环
// (3) return 可以退出循环 会报错
if(i===1){
// break;
// continue;
// return;
}
console.log(i)
}
for(let i of arr){
//(1) of 不会访问原型连上的
// (2) 返回value 值
// (3) break continue return 可以退出循环
if(i===2){
// break;
// continue;
// return;
}
console.log(i)
}
arr.map((item,index,arr)=>{
//(1) map 不会访问原型连上数据
// (2) 返回value,index,arr值
// (3) return 不能退出循环
//(4)continue break 报错
if(index==1){
// return
// continue
// break
}
console.log(item,index,arr)
})
arr.forEach((item,index,arr)=>{
//(1) map 不会访问原型连上数据
// (2) 返回value,index,arr值
// (3) return 不能退出循环
//(4)continue break 报错
if(index==1){
// return
// continue
// break
}
console.log(item,index,arr)
})
// 跳出foreach循环
let arrnew = [0, 1, "stop", 3, 4];
try {
arrnew.forEach(element => {
if (element === "stop") {
throw new Error("forEachBreak");
}
console.log(element); // 输出 0 1 后面不输出
});
} catch (e) {
console.log(e.message); // forEachBreak
};
// 重写foreach
Array.prototype.forEach = function (fn) {
for (let i = 0; i < this.length; i++) {
let ret = fn(this[i], i, this);
if (typeof ret !== "undefined" && (ret == null || ret == false)) break;
}
}
// map 通过try catch 捕获异常 来终止循环
const arrn = [1,2,3,4];
try {
arrn.map((v) => {
console.log(v)
if (v === 2) {
throw 'out';
}
})
} catch (e) {
console.log(e)
}
总结: map 和forEach 退出循环 可以通过try catch 方式退出循环