死循环: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))
}
28
收起
正在回答 回答被采纳积分+1
1回答
好帮手慕久久
2022-02-24 16:40:13
同学你好,解答如下:
1、二者区别在于,while(result=reg.exec(str))不仅执行了reg.exec(str),还把reg.exec(str)的结果赋值了变量result,即还有赋值操作:

至于这个赋值操作有什么用,要具体代码具体分析了。除了赋值语句这个区别外,从正则的效果上看,二者没区别。
2、之所以进入死循环,是因为while条件中的reg.exec(str)的结果永远不是false,导致跳不出while循环。为了方便讲解,可以改造一下代码:

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
}
}运行结果如下:

祝学习愉快!
谢谢老师指导,试验了下看了好久终于明白了。因为这两次调用函数,每次都执行了,给的str='
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星