the-front-end-knowledge-you-may-not-know icon indicating copy to clipboard operation
the-front-end-knowledge-you-may-not-know copied to clipboard

try-catch 退出 forEach 循环

Open chbro opened this issue 7 years ago • 10 comments

try {
    [1, 2, 3].forEach(v => {
        if (v === 2) {
            throw new Error('my err')
        }
    })
} catch (e) {
    if (e.message === 'my err') {
        console.log('breaked') 
    } else {
        throw e
    }
}

chbro avatar Apr 12 '18 02:04 chbro

😂

justjavac avatar Apr 12 '18 06:04 justjavac

https://softwareengineering.stackexchange.com/questions/189222/are-exceptions-as-control-flow-considered-a-serious-antipattern-if-so-why

xmcp avatar Apr 12 '18 06:04 xmcp

这个厉害了

dwqs avatar Apr 12 '18 06:04 dwqs

中途退出就不叫forEach了,你想退出用for就好了

zoffyzhang avatar Apr 12 '18 07:04 zoffyzhang

@zoffyzhang 还不是为了偷懒,总想优先使用forEach。虽然它不能保证遍历顺序,也不能break

chbro avatar Apr 12 '18 07:04 chbro

@zoffyzhang for in 或者 for of 或者 $.each 都支持 break。

xmcp avatar Apr 12 '18 07:04 xmcp

everysome

justjavac avatar Apr 12 '18 09:04 justjavac

[1, 2, 3].some(function(el) {
  console.log(el);
  return el === 2; // 如果el==2就跳出循环
});

zhanyuzhang avatar May 08 '18 09:05 zhanyuzhang

这个技巧还是挺实用的,我经常用reduce做需要对比数组前后项的操作,加上try catch的话可以快速退出

0x8f701 avatar Jul 05 '19 07:07 0x8f701

不实用,抛栈运行时成本太高,只有前端敢这么玩儿吧。。

yetone avatar Jul 16 '19 06:07 yetone