死循环:while(reg.exec(str))和while(result=reg.exec(str))有什么区别,我看了之前那个同学的提问,但是没明白老师说的

死循环:while(reg.exec(str))和while(result=reg.exec(str))有什么区别,我看了之前那个同学的提问,但是没明白老师说的

// exec方法

var str = 'abc123def456ghi789'

var reg = /\d+/g


while(reg.exec(str)){

console.log(reg.exec(str))

}


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕久久 2022-02-24 16:40:13

同学你好,解答如下:

1、二者区别在于,while(result=reg.exec(str))不仅执行了reg.exec(str),还把reg.exec(str)的结果赋值了变量result,即还有赋值操作:

https://img1.sycdn.imooc.com//climg/6217422a09857cb006400078.jpg


至于这个赋值操作有什么用,要具体代码具体分析了。除了赋值语句这个区别外,从正则的效果上看,二者没区别。

2、之所以进入死循环,是因为while条件中的reg.exec(str)的结果永远不是false,导致跳不出while循环。为了方便讲解,可以改造一下代码:

https://img1.sycdn.imooc.com//climg/62174388091b331b09000719.jpg

 var str = 'abc123def456ghi789'

        var reg = /\d+/g
       
        // 强制让while循环,只执行10次(循环10次,就强制退出)
        var result=1

        // 设置一个变量,保存while中的reg.exec(str)的结果是什么
        var test

        while (test=reg.exec(str)) { //这里用到了赋值语句

            // 打印看一下while中的reg.exec(str)结果是什么 
            console.log("while中的正则结果是:",test);

            // 这是while中本来有的打印
            console.log("while中本来有的正则打印结果是:",reg.exec(str))

            // 让result计数
            result++

            // 循环了10次,强制结束while循环(防止死循环)
            if(result==10){
                break
            }
        }

运行结果如下:

https://img1.sycdn.imooc.com//climg/62174464097be4d315080850.jpg

祝学习愉快!

  • 提问者 慕设计6620557 #1

    https://img1.sycdn.imooc.com//climg/62177071092d886612660508.jpg谢谢老师指导,试验了下看了好久终于明白了。因为这两次调用函数,每次都执行了,给的str='abc123def456ghi789'正好有3个,赶上条件循环的时候正好不是null, 如果str=''abc123def456ghi789sdbj2389'的话(4个)就不会死循环了,同理如果是奇数个的话,就是死循环,这是我的理解,对吧老师?

    2022-02-24 19:52:17
  • 好帮手慕久久 回复 提问者 慕设计6620557 #2

    同学你好,理解是对的,很棒,祝学习愉快!

    2022-02-25 11:43:28
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师