最近在使用while的时候,由于使用正则的exec方法,同时也是进行全局匹配,需要匹配出全部的内容,所以想用while进行循环获取。突然想起while可以在条件判断中进行while(nowParam = reg.exec(param) 语句的赋值。
这种用法以前我一直不太敢使用,担心会出现什么问题,一般都是先在循环外部定义好遍历,将值赋给遍历后再作为循环的条件。
所以今天想弄清楚这个的使用方法:
原代码:
while(nowParam = reg.exec(param)){
console.log(nowParam)
console.log(123)
}
打印输出nowParam这个变量是存在的
该变量并没有在循环的外部进行定义过,所以尝试在循环外部前面进行打印该变量,是会直接报错Uncaught ReferenceError: nowParam is not defined
console.log(nowParam)
while(nowParam = reg.exec(param)){
console.log(nowParam)
}
而尝试在循环体后面打印该变量,结果却是null
while(nowParam = reg.exec(param)){
console.log(nowParam)
}
console.log(nowParam)
所以在循环题条件判断语句中直接对一个未定义的变量进行赋值操作,实际上是等于先定义好一个变量,然后再进行赋值操作,而当循环结束后,清空该变量的内容,但是并不销毁这个变量??
后面又尝试了一下while((aa = i) > -2)这样的赋值写法
while((aa = i) > -2){
console.log(aa);
i--;
}
console.log(aa)
打印出来的结果是
这样写结束循环之后,aa的值没有被清空而是保留了下来
有点神奇,不过个人感觉相比之下还不如循环之前定义好变量,能明确一下你的变量以及变量的内容…